了解不同指针类型的对齐方式

时间:2013-03-04 03:44:53

标签: c++ windows visual-c++ porting

作为为指针和非指针数据类型创建单独模型的一个明智决定,Microsoft提出了一组数据类型,强烈建议使用它们而不是POD,如int__int64longsignedunsigned版本)。

当前模型Microsoft Follows是IL32P64,它强制所有C类型指针强制转换为指针截断的整数类型。这迫使他们提出_PTR类型。对于每个有效的整数类型(已签名的未标记的),如longint或非POD类型,如DWORD,他们提出了等效的符号DWORD_PTR,{{1 }}

如果我们解析了typedef链,那么所有这些类型归结为以下定义

INT_PTR

我想知道的是,为每个整数类型和非POD等价创建不同类型的def的原因,而不是创建一个所有人都使用的类型(比如只有一个#if defined(_WIN64) typedef unsigned __int64 ULONG_PTR; #else typedef unsigned long ULONG_PTR; #endif #if defined(_WIN64) typedef unsigned __int64 LONG_PTR; #else typedef unsigned long LONG_PTR; #endif 和{{1 }})

为什么我想知道?

如果你总是在MS平台上,那么很少有人会对MS的问题提出疑问。如果您的代码是多平台,则会出现问题。您必须为* nix定义等效类型以使您的代码可移植。

我计划只创建两个指针类型INT_PTRUINT_PTR,并且具有相同的定义并使用它,而不管之前的类型是什么。

0 个答案:

没有答案