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++的還涉及虛函數的虛表問題,需要加上虛表指針的大小,關於內存對齊的問題在別的博客會詳細寫。