我最近在我的应用程序中遇到了我认为是错误共享的问题,我查阅了Sutter关于如何将我的数据与缓存行对齐的文章。他建议使用以下 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 个字节填充就足够了?