【发布时间】:2012-02-22 07:35:11
【问题描述】:
我有几个遭受缓存争用的类,并使用“new”运算符进行分配。我能否以某种方式确保“新”返回与缓存行对齐的地址?
我正在使用 GCC(如果不能移植的话)。
【问题讨论】:
-
高速缓存行通常为 64 字节。您必须有一些非常小的类,因此必须执行大量非常小的动态分配?
-
有些很小,但大多数是重叠的(在缓存行中)。
-
您是单独分配实例还是在数组中分配实例?
-
它们是单独分配的。 (不过,我想最关键的部分可以重构为分配在一个数组中。)
-
我能想到的唯一解决方案是分配
sizeof(myobj)+63,然后在64字节边界的地址处使用placement new。
标签: c++ multithreading