Определения типов <new>
hardware_constructive_interference_size
inline constexpr size_t hardware_constructive_interference_size = implementation-defined;
Замечания
Это число является максимальным рекомендуемым размером непрерывной памяти, занятой двумя объектами, к которым обращается темпоральная локализация параллельных потоков. Это должно быть по крайней мере alignof(max_align_t)
.
Пример
struct together {
atomic<int> dog;
int puppy;
};
struct kennel {
// Other data members...
alignas(sizeof(together)) together pack;
// Other data members...
};
static_assert(sizeof(together) <= hardware_constructive_interference_size);
hardware_destructive_interference_size
inline constexpr size_t hardware_destructive_interference_size = implementation-defined;
Замечания
Это минимальное рекомендуемое смещение между двумя параллельными объектами, чтобы избежать снижения производительности из-за конфликтов, введенных реализацией. Это должно быть по крайней мере alignof(max_align_t)
.
Пример
struct keep_apart {
alignas(hardware_destructive_interference_size) atomic<int> cat;
alignas(hardware_destructive_interference_size) atomic<int> dog;
};
new_handler
Тип new_handler
указывает на функцию, подходящую для использования в качестве new handler
функции, которая может восстановить или освободить память.
typedef void (*new_handler)();
Замечания
Если функция этого типа задана std::set_new_handler
, функция вызывается operator new
или operator new[]
когда она не может удовлетворить запрос на большее хранилище.
Пример
Пример, который используется new_handler
в качестве возвращаемого значения, см. в разделе set_new_handler
.