的documentation for the InterlockedExchangePointer Function状态:C++ InterlockedExchangePointer和指针对准
在一个64位系统,参数是64个位,而目标参数必须在64位边界对齐;否则,该功能将表现不可预知。在32位系统上,参数是32位,目标参数必须在32位边界上对齐。
我编译为32位,并计划将在32位和64位架构运行;以下结构提供的指针是可由InterlockedExchangePointer在任何(32位或64位)运行架构上使用,无需代码适应?
template <class T>
struct Foo {
enum { count = 3 };
__declspec(align(64)) T objects[count];
};
(我想,如果一个指针是在64位对准它也排列在32位 - 即使是填充如果在32位运行)
感谢。
我不认为它很重要 - 64位和32位版本会生成不同的指令。在64位操作系统下运行32位二进制文件仍然会为您提供32位虚拟机。 – 2010-02-23 15:47:59
根本不需要混淆__declspec。指针(与所有其他数据类型一样)在正常分配时自动对齐。这个文档说明只是指出,如果你手动搞砸了对齐 – jalf 2010-02-23 17:06:14
jalf,那么我就搞不清分配的存储和非指针成员对象;无效*指针[计数]成为T对象[计数],所以这是不分配更多... – moala 2010-02-24 10:27:29