C/C++中基本数据类型所占内存大小
c++
C中不同数据类型所占的字节大小,在不同的操作系统和编译器下,是不同的,一般主要说gcc下,32位或64位系统的,做了个表如下:
数据类型 | 32位 | 64位 | 取值范围(32位) |
---|---|---|---|
char | 1 | 1 | -128~127 |
unsigned char(当byte使用) | 1 | 1 | 0~255 |
short int /short | 2 | 2 | –32,768~32,767 |
unsigned short | 2 | 2 | 0~65,535 |
int | 4 | 4 | -2,147,483,648~2,147,483,647 |
unsigned int | 4 | 4 | 0~4,294,967,295 |
long int /long(不同) | 4 | 8 | –2,147,483,648~2,147,483,647 |
unsigned long(不同) | 4 | 8 | 0~4,294,967,295 |
long long int/long long | 8 | 8 | -9,223,372,036,854,775,808 ~9,223,372,036,854,775,807 |
指针 (不同) | 4 | 8 | |
float | 4 | 4 | 3.4E +/- 38 (7 digits) |
double | 8 | 8 | 1.7E +/- 308 (15 digits) |
注意:
求数组大小时,如果数组作为参数传递时,退化为指针,所以sizeof(arr)大小为该系统下指针的大小
对于C字符串,需要牢记C/C++中一个汉字占两个字节(Linux下3个字节)。
求struct 或者 class 的大小时候,除了基本的数据类型大小,特别要考虑的是字节对齐问题,如果是C++的还涉及虚函数的虚表问题,需要加上虚表指针的大小。