如何在高速缓存边界对齐数据结构
原文地址:http://intel.csdn.net/ISN_J.aspx?action=JMP&pointid=396
挑战
确保每个同步变量都独自位于一个高速缓存行上。 正如我们在如何避免错误共享 中所讨论的那样,当将同步结构拉伸至高速缓存行的大小后,必须确保同步结构在高速缓存边界上对齐。
解决方案
利用下面给出的适当编码技术,将数据结构在高速缓存边界上对齐。 将同步结构拉伸为高速缓存行的大小并不能说是完全大功告成。您还需确保同步结构在高速缓存边界上对齐。同步变量不能与另一个同步结构位于相同的高速缓存行上,如果同步结构没有在高速缓存边界上对齐,则同步变量无法独自位于一个高速缓存行上。可以采用下面两种技术中的一种来执行对齐。
针对动态内存,采用如下代码片断:
struct syn_str { int s_variable; };
void *p = malloc ( sizeof (struct syn_str) + 127 );
syn_str * align_p = (syn_str *)( (((int) p) + 127) & -128 );
当使用英特尔 C/C++ 编译器时,也可采用下面的代码片断:
_declspec(align(128)) struct syn_str aligned_structure;