c ++ InterlockedExchangePointer和指针对齐

时间:2010-02-23 15:43:13

标签: c++ pointers alignment

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位运行时有填充)

感谢。

1 个答案:

答案 0 :(得分:2)

在为32位平台编写的64位系统程序将通过兼容层(WoW,Windows on Windows)工作,并且指针必须以32位对齐。

但是,如果你以64位模式编译你的程序 - 你的指针将自动对齐64位。