gpt4 book ai didi

c++ - 缓存行对齐(需要在文章中说明)

转载 作者:可可西里 更新时间:2023-11-01 16:37:10 26 4
gpt4 key购买 nike

我最近在我的应用程序中遇到了一个我认为是错误共享的问题,并且我查找了 Sutter's article关于如何将我的数据与缓存行对齐。他建议使用以下 C++ 代码:

// C++ (using C++0x alignment syntax)
template<typename T>
struct cache_line_storage {
[[ align(CACHE_LINE_SIZE) ]] T data;
char pad[ CACHE_LINE_SIZE > sizeof(T)
? CACHE_LINE_SIZE - sizeof(T)
: 1 ];
};

CACHE_LINE_SIZE > sizeof(T) 为真时,我可以看到它是如何工作的——结构 cache_line_storage 最终占用了一个完整的内存缓存行。但是,当 sizeof(T) 大于单个缓存行时,我认为我们应该用 CACHE_LINE_SIZE - T % CACHE_LINE_SIZE 字节填充数据,以便结果结构的大小是缓存行大小的整数倍。我的理解有什么问题?为什么填充 1 个字节就足够了?

最佳答案

您不能拥有大小为 0 的数组,因此需要 1 才能使其编译。但是,规范的当前草案版本表示这种填充是不必要的;编译器必须填充到结构的对齐方式。

另请注意,如果 CACHE_LINE_SIZE 小于 alignof(T),则此代码格式错误。要解决此问题,您可能应该使用 [[align(CACHE_LINE_SIZE), align(T)]],这将确保永远不会选择更小的对齐方式。

关于c++ - 缓存行对齐(需要在文章中说明),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1744407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com