documentation for the InterlockedExchangePointer Function州:
在 64位系统上,参数为64位,目标参数必须在64位边界上对齐;否则,该功能将无法预测。在 32位系统上,参数为32位,目标参数必须在32位边界上对齐。
我正在编译32位,程序将在32位和64位架构上运行;下面的结构是否提供了在没有代码适配的任何(32或64位)运行架构上由InterlockedExchangePointer使用的指针?
template <class T>
struct Foo {
enum { count = 3 };
__declspec(align(64)) T objects[count];
};
(我想如果单个指针在64位上对齐,它也会在32位上对齐 - 即使在32位运行时有填充)
感谢。
答案 0 :(得分:2)
在为32位平台编写的64位系统程序将通过兼容层(WoW,Windows on Windows)工作,并且指针必须以32位对齐。
但是,如果你以64位模式编译你的程序 - 你的指针将自动对齐64位。