在MSDN上,我看到了
InterlockedCompareExchange64
要求参数为64对齐,
但是
_InterlockedCompareExchange64
我认为没有对齐的要求,而且确实如此 提到为InterlockedCompareExchange64提供编译器内在支持。
那么,这是否意味着我可以使用_InterlockedCompareExchange64而无需关心对齐?因为我不太清楚这里的对齐方式。
答案 0 :(得分:3)
我很确定这是一个文档错误,而不是两个函数之间的任何直接差异 - 因为它们导致完全相同的CMPXCHG8B指令。 [当然假设你正在寻找它在SMP系统上实际上是原子的 - 但它是一个非常专业的指令,所以我怀疑它有很多其他用途]。
答案 1 :(得分:3)
暗示,_underscore版本仅在定义_M_IA64或_M_AMD64时可用。换句话说,当您将程序定位到64位处理器时。
您应该在代码中使用非下划线版本。当您以32位处理器为目标时,该功能在Windows中实现,您将获得一个安全版本,该版本适用于未对齐的目标。但是如果你的目标是64位处理器,那么你将自动获得_underscore版本和内在版本。 WinBase.h中的宏汤处理它。