在缓存行的开头变量

时间:2011-07-29 11:47:55

标签: c performance caching

我想在缓存中创建一个带有适当变量alignemt的多线程C程序,以避免“缓存晃动”。我从/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size得到缓存行长度,所以我知道如何填充我的数组以占用完整的缓存行。

但是,我怎样才能确定在缓存行的开头是否完全分配了一个数组?还是自动的? (如果它是自动的,我不会关心填充......)

2 个答案:

答案 0 :(得分:3)

要使用特定对齐方式分配内存,请使用posix_memalign

(我不知道内存分配器是否足够智能,可以自动分配缓存线边界。)

答案 1 :(得分:0)

我认为没有便携式标准C功能可以直接确保这一点。一种可移植的方法是分配比您需要的内存稍多的内存,然后将您真正使用的部分偏移到满足对齐要求的第一个地址。这同样适用于堆和堆栈内存。

这样做的缺点是对于malloc内存,你总是必须在某个地方保留一个指向原始内存的指针,以便之后可以使用free

相关问题