为了防止伪共享(false sharing),我想将数组的每个元素都对齐到一个缓存行(cache line)。所以首先需要知道缓存行的大小,然后为每个元素分配相应数量的字节。其次,我希望数组的起始地址也能对齐到一个缓存行。
我使用Linux和8核x86平台。第一步是如何找到缓存行的大小。第二步是如何在C语言中实现对齐到缓存行。我使用gcc编译器。
例如,假设缓存行大小为64,则结构应如下所示:
我使用Linux和8核x86平台。第一步是如何找到缓存行的大小。第二步是如何在C语言中实现对齐到缓存行。我使用gcc编译器。
例如,假设缓存行大小为64,则结构应如下所示:
element[0] occupies bytes 0-63
element[1] occupies bytes 64-127
element[2] occupies bytes 128-191
假设0-63对齐到缓存行,等等其他情况都是如此。