std::hardware_constructive_interference_size 有用吗?

Is std::hardware_constructive_interference_size ever useful?

这方面的现有问题仍然没有专门问我的问题:

第二个的答案实际上让我问了这个问题。

所以,假设我想要建设性的干涉。我将几个变量放入一个适合 std::hardware_constructive_interference_size:

的结构中
struct together
{
  int a;
  int b;
};

优势似乎太弱了,如果不合适就禁止用static_assert编译:

// Not going to do the below:
static_assert(sizeof(together) <= std::hardware_constructive_interference_size);

仍然对齐有助于避免结构跨度:

struct alignas(std::hardware_constructive_interference_size) together
{
  int a;
  int b;
};

然而,仅对齐结构大小也可以达到相同的效果:

struct alignas(std::bit_ceil(2*sizeof(int))) together
{
  int a;
  int b;
};

如果结构大小大于 std::hardware_constructive_interference_size,根据结构大小对齐它可能仍然有帮助,因为:

所以,std::hardware_constructive_interference_size还有点吗?

考虑 std::deque<T>。它通常使用给定大小的块来实现。但是每个块存储多少个 T?一个合理的答案是 std::hardware_constructive_interference_size/sizeof(T),如果 sizeof(T) 很小。

类似地,具有小字符串优化的字符串 class 的目标可能是 std::hardware_constructive_interference_size 的大小。通常,当您可以拥有 运行 时间可变的数据量且引用位置较高时,该大小很有用。