当前位置:  开发笔记 > 开发工具 > 正文

InterlockedExchange和内存对齐

如何解决《InterlockedExchange和内存对齐》经验,为你挑选了1个好方法。

我很困惑,微软表示InterlockedExchange需要内存对齐,但是,英特尔文档说LOCK不需要内存对齐.我错过了什么,或者其他什么?谢谢

来自Microsoft MSDN Library

Platform SDK:DLL,进程和线程InterlockedExchange

Target参数指向的变量必须在32位边界上对齐 ; 否则,此函数将在多处理器x86系统和任何非x86系统上出现不可预测的行为.

来自英特尔软件开发人员手册;

LOCK指令在执行伴随指令期间使处理器的LOCK#信号有效(将指令转换为原子指令).在多处理器环境中,LOCK#信号确保处理器在信号被置位时独占使用任何共享存储器.

LOCK前缀的完整性不受存储器字段对齐的影响. 对于任意未对齐的字段,观察到存储器锁定.

P6中的内存排序和更新的处理器系列

锁定的指令有一个总订单.

软件控制总线锁定

总线锁的完整性不受存储器字段对齐的影响.遵循LOCK语义以获得更新整个操作数所需的多个总线周期.但是,建议锁定访问在其自然边界上对齐,以获得更好的系统性能:•8位访问的任何边界(锁定或其他).•锁定字访问的16位边界.•锁定双字访问的32位边界.•锁定四字访问的64位边界.

Chris Dodd.. 6

曾几何时,Microsoft在x86以外的处理器上支持WindowsNT,例如MIPS,PowerPC和Alpha.这些处理器都需要对齐其互锁指令,因此Microsoft在其规范中提出了要求,以确保这些原语可以移植到不同的体系结构中.



1> Chris Dodd..:

曾几何时,Microsoft在x86以外的处理器上支持WindowsNT,例如MIPS,PowerPC和Alpha.这些处理器都需要对齐其互锁指令,因此Microsoft在其规范中提出了要求,以确保这些原语可以移植到不同的体系结构中.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有