我想在缓存中创建一个带有适当变量alignemt的多线程C程序,以避免“缓存晃动”。我从/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size
得到缓存行长度,所以我知道如何填充我的数组以占用完整的缓存行。
但是,我怎样才能确定在缓存行的开头是否完全分配了一个数组?还是自动的? (如果它是自动的,我不会关心填充......)
答案 0 :(得分:3)
要使用特定对齐方式分配内存,请使用posix_memalign
。
(我不知道内存分配器是否足够智能,可以自动分配缓存线边界。)
答案 1 :(得分:0)
我认为没有便携式标准C功能可以直接确保这一点。一种可移植的方法是分配比您需要的内存稍多的内存,然后将您真正使用的部分偏移到满足对齐要求的第一个地址。这同样适用于堆和堆栈内存。
这样做的缺点是对于malloc
内存,你总是必须在某个地方保留一个指向原始内存的指针,以便之后可以使用free
。