本文详细对比了C++中常见数据类型在32位和64位系统下的内存占用情况,涵盖了标准类型(如int、long、double等)和自定义类型(如UINT32、INT64等)。通过代码示例和表格数据,展示了不同编译环境(VS2010、VS2019、Linux)下各类型的大小差异,特别是size_t、pointer、long等类型在32位和64位系统中的显著变化。文章为开发者提供了跨平台开发时类型选择的参考,帮助避免因类型大小不一致导致的问题。
C++ 类型大小 (32bit 与 64bit)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include <iostream>
int main() { std::cout << "---标准类型大小---" << std::endl; std::cout << "short size: " << sizeof(short) << std::endl; std::cout << "int size: " << sizeof(int) << std::endl; std::cout << "unsigned int size: " << sizeof(unsigned int) << std::endl; std::cout << "long size: " << sizeof(long) << std::endl; std::cout << "unsigned long size: " << sizeof(unsigned long) << std::endl; std::cout << "long long size: " << sizeof(long long) << std::endl; std::cout << "unsigned long long size: " << sizeof(unsigned long long) << std::endl; std::cout << "size_t size: " << sizeof(size_t) << std::endl; std::cout << "double size: " << sizeof(double) << std::endl; std::cout << "float size: " << sizeof(float) << std::endl; std::cout << "char size: " << sizeof(char) << std::endl; std::cout << "unsigned char size: " << sizeof(unsigned char) << std::endl; std::cout << "signed char size: " << sizeof(signed char) << std::endl; std::cout << "pointer size: " << sizeof(void*) << std::endl;
std::cout << std::endl; std::cout << "---自定义类型大小---" << std::endl; std::cout << "SHORT(short) size: " << sizeof(short) << std::endl; std::cout << "INT(int) size: " << sizeof(int) << std::endl; std::cout << "LONG(long) size: " << sizeof(long) << std::endl; std::cout << "UINT8(unsigned char) size: " << sizeof(unsigned char) << std::endl; std::cout << "UINT16(unsigned short) size: " << sizeof(unsigned short) << std::endl; std::cout << "UINT32(unsigned int) size: " << sizeof(unsigned int) << std::endl; std::cout << "UINT64(unsigned long long) size: " << sizeof(unsigned long long) << std::endl; std::cout << "INT8(char) size: " << sizeof(char) << std::endl; std::cout << "INT16(short) size: " << sizeof(short) << std::endl; std::cout << "INT32(int) size: " << sizeof(int) << std::endl; std::cout << "INT64(long long) size: " << sizeof(long long) << std::endl; std::cout << "FLOAT(float) size: " << sizeof(float) << std::endl; std::cout << "DOUBLE(double) size: " << sizeof(double) << std::endl; std::cout << "CHAR(char) size: " << sizeof(char) << std::endl; std::cout << "BOOL(int) size: " << sizeof(int) << std::endl; std::cout << "BYTE(unsigned char) size: " << sizeof(unsigned char) << std::endl; std::cout << "HANDLE(void*) size: " << sizeof(void*) << std::endl;
return 0; }
|
| 类型 |
VS2010 32bit |
VS2010 64bit |
VS2019 32bit |
VS2019 64bit |
Linux 32bit |
Linux 64bit |
备注 |
| short |
2 |
2 |
2 |
2 |
|
2 |
|
| int |
4 |
4 |
4 |
4 |
|
4 |
|
| long |
4 |
4 |
4 |
4 |
|
8 |
不同 |
| long long |
8 |
8 |
8 |
8 |
|
8 |
|
| unsigned short |
2 |
2 |
2 |
2 |
|
2 |
|
| unsigned int |
4 |
4 |
4 |
4 |
|
4 |
|
| unsigned long |
4 |
4 |
4 |
4 |
|
8 |
不同 |
| unsigned long long |
8 |
8 |
8 |
8 |
|
8 |
|
| size_t |
4 |
8 |
4 |
8 |
|
8 |
不同 |
| char |
1 |
1 |
1 |
1 |
|
1 |
|
| signed char |
1 |
1 |
1 |
1 |
|
1 |
|
| unsigned char |
1 |
1 |
1 |
1 |
|
1 |
|
| float |
4 |
4 |
4 |
4 |
|
4 |
|
| double |
8 |
8 |
8 |
8 |
|
8 |
|
| pointer |
4 |
8 |
4 |
8 |
|
8 |
不同 |
| SHORT(short) |
2 |
2 |
2 |
2 |
|
2 |
|
| INT(int) |
4 |
4 |
4 |
4 |
|
4 |
|
| LONG(long) |
4 |
4 |
4 |
4 |
|
8 |
不同 |
| UINT8(unsigned char) |
1 |
1 |
1 |
1 |
|
1 |
|
| UINT16(unsigned short) |
2 |
2 |
2 |
2 |
|
2 |
|
| UINT32(unsigned int) |
4 |
4 |
4 |
4 |
|
4 |
|
| UINT64(unsigned long long) |
8 |
8 |
8 |
8 |
|
8 |
|
| INT8(char) |
1 |
1 |
1 |
1 |
|
1 |
|
| INT16(short) |
2 |
2 |
2 |
2 |
|
2 |
|
| INT32(int) |
4 |
4 |
4 |
4 |
|
4 |
|
| INT64(long long) |
8 |
8 |
8 |
8 |
|
8 |
|
| FLOAT(float) |
4 |
4 |
4 |
4 |
|
4 |
|
| DOUBLE(double) |
8 |
8 |
8 |
8 |
|
8 |
|
| CHAR(char) |
1 |
1 |
1 |
1 |
|
1 |
|
| BOOL(int) |
4 |
4 |
4 |
4 |
|
4 |
|
| BYTE(unsigned char) |
1 |
1 |
1 |
1 |
|
1 |
|
| HANDLE(void*) |
4 |
8 |
4 |
8 |
|
8 |
不同 |
结论:
size_t、pointer、long、unsigned long、HANDLE这三种类型在32bit和64bit的大小有差别。