3

在 MSDN 上,我看到了

InterlockedCompareExchange64

要求参数是 64 对齐的,

但对于

_InterlockedCompareExchange64 

我认为没有这样的对齐要求,并且提到它为 InterlockedCompareExchange64 提供编译器内在支持。

那么,这是否意味着我可以使用 _InterlockedCompareExchange64 而不关心对齐?因为我不太清楚对齐在这里意味着什么。

4

2 回答 2

3

我很确定这是一个文档错误,而不是两个函数之间的任何直接区别——因为它们导致完全相同的 CMPXCHG8B 指令。[当然假设您正在寻找它实际上是 SMP 系统上的原子 - 但它是一个非常专业的指令,所以我怀疑它有很多其他用途]。

于 2013-08-13T09:08:04.220 回答
3

暗示,_underscore 版本仅在定义 _M_IA64 或 _M_AMD64 时可用。换句话说,当您将程序定位到 64 位处理器时。

您应该在代码中使用非下划线版本。当您以 32 位处理器为目标时,该功能在 Windows 中实现,您将获得一个适用于未对齐目标的安全版本。但是,如果您以 64 位处理器为目标,那么您将自动获得 _underscore 版本和内在函数。WinBase.h 中的宏汤负责处理它。

于 2013-08-13T10:09:30.063 回答