sizeof求結構體大小的問題

2021-07-10 09:13:26 字數 550 閱讀 9890

標籤(空格分隔):c/c++

具體見:

【補充】另外乙個涉及資料型別以及記憶體儲存的問題

記憶體中的資料並非儲存在任意位址。處理器通常按照和其字大小相同的塊讀取記憶體資料;那麼考慮到效率因素,編譯器會按照塊大小的整數倍對記憶體中的實體進行位址對齊。因此在 32 位的處理器上,乙個 4 位元組整型資料肯定存放在記憶體位址能被4整除的地方

下面,假設系統中整型資料和指標大小均為 4 位元組。

現在有乙個指向整型的指標。如上所述,整型資料可以存放在記憶體位址 0×1000 或者 0×1004 或者 0×1008,但是決不會存放在 0×1001 或者0×1002 或者 0×1003 或者其他不能被4整除的任何位址。所有是4整數倍的二進位制數都是以 00 結尾。實際上,這意味著對於所有指向整型的指標,它的最後兩位總是 0。

因為有這樣的情況發生,我們倒是可以利用4整數倍的二進位制數都是以00結尾這樣的特性,將一些臨時資料儲存在位址的低兩位的位置,只是記得位址取資料的時候一定要恢復位址的原始值。相應的資料隱藏的處理可見:

sizeof求結構體的大小時遇到的問題

運算子sizeof可以計算出給定型別的大小,對於32位系統來說,sizeof char 1 sizeof int 4。基本資料型別的大小很好計算,我們來看一下如何計算構造資料型別的大小。c語言中的構造資料型別有三種 陣列 結構體和共用體。陣列是相同型別的元素的集合,只要會計算單個元素的大小,整個陣列...

c語言 sizeof 求結構體大小

運算子sizeof可以計算出給定型別的大小,對於32位系統來說,sizeof char 1 sizeof int 4。基本資料型別的大小很好計算,我們來看一下如何計算構造資料型別的大小。c語言中的構造資料型別有三種 陣列 結構體和共用體。陣列是相同型別的元素的集合,只要會計算單個元素的大小,整個陣列...

c語言sizeof求結構體的大小

運算子sizeof可以計算出給定型別的大小,對於32位系統來說,sizeof char 1 sizeof int 4。基本資料型別的大小很好計算,我們來看一下如何計算構造資料型別的大小。c語言中的構造資料型別有三種 陣列 結構體和共用體。陣列是相同型別的元素的集合,只要會計算單個元素的大小,整個陣列...