这方面的现有问题仍然没有具体提出我的问题:
第二个问题的答案让我问了这个问题。
所以,假设我想要有建设性的干涉。我在一个适合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,则仍然可以将其与结构大小对齐,因为:
它是编译时提示,可能随着以后的CPU而过时--编译后的程序运行在line
那么,std::hardware_constructive_interference_size还有什么意义吗?
发布于 2020-05-05 13:04:26
以std::deque<T>为例。它通常使用给定大小的块来实现。但是你每块有多少个T呢?一个合理的答案是std::hardware_constructive_interference_size/sizeof(T),如果sizeof(T)很小的话。
类似地,具有小字符串优化的字符串类可能以std::hardware_constructive_interference_size的大小为目标。通常,当您可以拥有具有高引用局部性的运行时可变数据量时,大小是非常有用的。
https://stackoverflow.com/questions/61610761
复制相似问题