你真的瞭解sizeof 麼?


sizeof並不是C語言和C++語言中的一個函數,而是一個關鍵字,一個操作符
它的作用是返回一個對象或者類型名的長度,也就是說這個對象或者類型所佔的內存字節數。它的返回值類型爲size_t(usinged int),長度的單位是字節。
1)對基本數據類型運用sizeof操作,得到其佔用內存的字節數


它的輸出是4 和 8,因爲int在內存中佔用4個字節,double在內存中佔用8個字節。
2)對指針做sizeof操作,得到的將是存放指針所需的內存大小

對於32位的及其來說,每個指針的佔用的內存大小都是一個字,亦即32位,也就是4字節,所以第一行輸出的是4 4 4 ,對於第二行不用多說,對指針解引用,就是輸出的實際上是每個變量的sizeof ,1 4 8

3)對數組做sizeof操作等效於將對其元素類型做sizeof操作的結果乘上數組元素的個數

第一個sizeof是輸出數組a在內存中的總長度;第二個sizeof實際是輸出數組a的第一個元素(p指針指向其第一個元素)2在內存中所佔的字節數,因爲是double類型,所以輸出8;第三個sizeof是輸出指針p在內存中所佔的字節數,如2)所示,爲四個字節。
4)對結構體做sizeof操作時得到的是整個結構體所佔用內存的大小,但是需要注意的是,結構體構造的時候不足4字節的類型在內存中實際佔用了4個字節,這就是所謂的內存對齊


爲什麼是16而不是13呢?這是因爲雖然char是一個字節,但是在結構體定義的內存中它佔用了整整32位,也就是4個字節,加4個字節的int,和8個字節的double,就是16個字節。
對於sizeof始終要記住的就是:它對某個對象或者類型操作,得出的是這個對象或類型在內存中實際佔用的字節數,返回的是一個usinged int類型的整數。以上分析均是針對32位的機器。

 

發佈了29 篇原創文章 · 獲贊 93 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章