您的位置:首页 > 编程语言 > C语言/C++

C++变量在32位系统和64位系统的区别

2013-12-08 16:54 274 查看
Let's describe here only types which can be of interest for developers when porting applications. These types are shown in Table 3. Most recompilation errors will relate to using these very types.

TypeType's size on x32 / x64 platformNote
int32 / 32Basic type. On 64-bit systems remains 32-bit.
long32 / 32Basic type. On 64-bit Windows systems remains 32-bit. Keep in mind that in 64-bit Linux systems this type was extended to 64-bit. Don't forget about it if you develop code which should be compiled for Windows and Linux systems.
size_t32 / 64Basic unsigned type. The type's size is chosen in such a way that you could write the maximum size of a theoretically possible array into it. You can safely put a pointer into size_t type (except for pointers to class functions, but this is a special case).
ptrdiff_t32 / 64Similar to size_t type but this is a signed type. The result of the expression where one pointer is subtracted from the other (ptr1-ptr2) will have ptrdiff_t type.
Pointer32 / 64The size of the pointer directly depends on the platform's size. Be careful while converting pointers to other types.
__int6464 / 64Signed 64-bit type.
DWORD32 / 3232-bit unsigned type. In WinDef.h is defined as:typedef unsigned long DWORD;
DWORDLONG64 / 6464-bit unsigned type. In WinNT.h is defined as:typedef ULONGLONG DWORDLONG;
DWORD_PTR32 / 64Unsigned type in which a pointer can be placed. In BaseTsd.h is defined as:typedef ULONG_PTR DWORD_PTR;
DWORD3232 / 3232-bit unsigned type. In BaseTsd.h is defined as:typedef unsigned int DWORD32;
DWORD6464 / 6464-bit unsigned type. In BaseTsd.h is defined as:typedef unsigned __int64 DWORD64;
HALF_PTR16 / 32A half of a pointer. In Basetsd.h is defined as:#ifdef _WIN64 typedef int HALF_PTR;#else typedef short HALF_PTR;#endif
INT_PTR32 / 64Signed type in which a pointer can be placed. In BaseTsd.h is defined as:#if defined(_WIN64) typedef __int64 INT_PTR; #else typedef int INT_PTR;#endif
LONG32 / 32Signed type which remained 32-bit. That's why in many cases LONG_PTR now should be used. In WinNT.h is defined as:typedef long LONG;
LONG_PTR32 / 64Signed type in which a pointer can be placed. In BaseTsd.h is defined as:#if defined(_WIN64) typedef __int64 LONG_PTR; #else typedef long LONG_PTR;#endif
LPARAM32 / 64Parameter for sending messages. In WinNT.h is defined as:typedef LONG_PTR LPARAM;
SIZE_T32 / 64Analog of size_t type. In BaseTsd.h is defined as:typedef ULONG_PTR SIZE_T;
SSIZE_T32 / 64Analog of ptrdiff_t type. In BaseTsd.h is defined as:typedef LONG_PTR SSIZE_T;
ULONG_PTR32 / 64Unsigned type in which a pointer can be placed. In BaseTsd.h is defined as:#if defined(_WIN64) typedef unsigned __int64 ULONG_PTR;#else typedef unsigned long ULONG_PTR;#endif
WORD16 / 16Unsigned 16-bit type. In WinDef.h is defined as:typedef unsigned short WORD;
WPARAM32 / 64Parameter for sending messages. In WinDef.h is defined as:typedef UINT_PTR WPARAM;
Table 3. Types to be noted while porting 32-bit programs on 64-bit Windows systems.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: