如何在高速缓存边界对齐数据结构

挑战
确保每个同步变量都独自位于一个高速缓存行上。 正如我们在 如何避免错误共享  中所讨论的那样,当将同步结构拉伸至高速缓存行的大小后,必须确保同步结构在高速缓存边界上对齐。

解决方案
利用下面给出的适当编码技术,将数据结构在高速缓存边界上对齐。 将同步结构拉伸为高速缓存行的大小并不能说是完全大功告成。您还需确保同步结构在高速缓存边界上对齐。同步变量不能与另一个同步结构位于相同的高速缓存行上,如果同步结构没有在高速缓存边界上对齐,则同步变量无法独自位于一个高速缓存行上。可以采用下面两种技术中的一种来执行对齐。

针对动态内存,采用如下代码片断:

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;

欲了解这些代码片断的更多内容,以及它们在实际情形中的使用,请参阅本主题 "资料来源" 中引用的应用注释。

资料来源
Submit Comment
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值