c++中各類型數據所占字節數(一)


轉自:

https://blog.csdn.net/hi_baymax/article/details/82415896

 

和機器字長及編譯器有關系: 所以,int,long int,short int的寬度都可能隨編譯器而異。但有幾條鐵定的原則(ANSI/ISO制訂的):

1 sizeof(short int)<=sizeof(int)

2 sizeof(int)<=sizeof(long int)

3 short int至少應為16位(2字節)

4 long int至少應為32位。 unsigned 是無符號的意思。

例如:

16位編譯器 char :1個字節 char*(即指針變量): 2個字節 short int : 2個字節 int: 2個字節 unsigned int : 2個字節 float: 4個字節 double: 8個字節 long: 4個字節 long long: 8個字節 unsigned long: 4個字節

32位編譯器

char :1個字節 char*(即指針變量): 4個字節(32位的尋址空間是2^32, 即32個bit,也就是4個字節。同理64位編譯器) short int : 2個字節 int: 4個字節 unsigned int : 4個字節 float: 4個字節 double: 8個字節 long: 4個字節 long long: 8個字節 unsigned long: 4個字節

64位編譯器 char :1個字節 char*(即指針變量): 8個字節 short int : 2個字節 int: 4個字節 unsigned int : 4個字節 float: 4個字節 double: 8個字節 long: 8個字節 long long: 8個字節 unsigned long: 8個字節

總結:不同位數的編譯器指針變量的字節數不同,指針變量即地址,亦即尋址空間,等於2^編譯器位數

注意:對字符串進行sizeof操作的時候,會把字符串的結束符"\0"計算進去的,進行strlen操作求字符串的長度的時候,不計算\0的。數組作為函數參數傳遞的時候,已經退化為指針了

在類中,如果什么都沒有,則類占用1個字節,一旦類中有其他的占用空間成員,則這1個字節就不在計算之內,如一個類只有一個int則占用4字節而不是5字節。

如果只有成員函數,則還是只占用1個字節,因為類函數不占用空間

虛函數因為存在一個虛函數表,需要4個字節,數據成員對象如果為指針則為4字節,注意有字節對齊,如果為13字節,則進位到16字節空間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM