C/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 |
4 |
–2,147,483,648~2,147,483,647 |
unsigned long |
4 |
4 |
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) |
long double |
12 |
16 |
注意:
1. 求数组大小时,如果数组作为参数传递时,退化为指针,所以sizeof(arr)大小为该系统下指针的大小
2. 对于C字符串,需要牢记C/C++中一个汉字占两个字节(Linux下3个字节)。
3. 求struct 或者 class 的大小时候,除了基本的数据类型大小,特别要考虑的是字节对齐问题,如果是C++的还涉及虚函数的虚表问题,需要加上虚表指针的大小,关于内存对齐的问题在别的博客会详细写。