21 Language support library [language.support]

21.6 Dynamic memory management [support.dynamic]

21.6.5 Hardware interference size [hardware.interference]

inline constexpr size_t hardware_destructive_interference_size = implementation-defined;

Это число является минимальным рекомендуемым смещением между двумя объектами, к которым осуществляется одновременный доступ, чтобы избежать дополнительного снижения производительности из-за конкуренции, вызванной реализацией. Должно быть как минимум alignof(max_­align_­t).

[Example:

struct keep_apart {
  alignas(hardware_destructive_interference_size) atomic<int> cat;
  alignas(hardware_destructive_interference_size) atomic<int> dog;
};

end example]

inline constexpr size_t hardware_constructive_interference_size = implementation-defined;

Это число представляет собой максимальный рекомендуемый размер непрерывной памяти, занятой двумя объектами, доступ к которым осуществляется с временной локальностью для одновременных потоков. Должно быть как минимум alignof(max_­align_­t).

[Example:

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);

end example]