C語言的深入 記憶體對齊的概念

2021-09-28 22:04:38 字數 869 閱讀 2669

1、記憶體對齊的概念

對齊跟資料在記憶體中的位置有關。如果乙個變數的記憶體位址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設乙個整型變數的位址為0x00000004,那它就是自然對齊的。

2、記憶體對齊的意義

需要記憶體對齊的根本原因在於cpu訪問資料的效率問題。

從某種意義上講,記憶體對齊就是空間換時間

3、結構體大小的判斷

struct s1

;struct s2

;int

main()

進行計算前我們先講述一些知識。

1、第乙個成員在與結構體變數偏移量為0的位址處。

意味著假如有一塊記憶體,第乙個成員所在的位置就是該記憶體開始的地方

2、對齊數的概念

結構體的每個成員都有它的對齊數,對齊數的定義:該成員的大小與系統預設對齊數的最小值,在vs編譯器中預設8,linux中預設4。

其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。

3、結構體的整體大小必須是最大對齊數的整數倍

也就是說,若該結構體成員中最大對齊數為4,那麼總結構體的大小必須是4的整數倍,若在計算中不夠整數倍需要在記憶體中留處空白補齊

因此,s1的大小就是 8,s2的大小就是 12

感謝瀏覽。

C 深入(記憶體模型)

為什麼有資料型別?現實生活中的資料太多而且大小形態不一。資料型別與記憶體的關係 資料型別的本質 建立變數的模具,是固定大小的別名。include stdio.h include stdlib.h include string.h int main 問題 b,b所代表的資料型別不一樣 b代表的是陣列首...

C語言 記憶體對齊

寫出乙個struct,然後sizeof,你會不會經常對結果感到奇怪?sizeof的結果往往都比你宣告的變數總長度要大,這是怎麼回事呢?講講位元組對齊吧.分割線 如果體系結構是不對齊的,a中的成員將會乙個挨乙個儲存,從而sizeof a 為11。顯然對齊更浪費了空間。那麼為什麼要使用對齊呢?體 繫結構...

c語言記憶體對齊

記錄平常所學,以便回顧。c語言中存在著記憶體對齊問題,在struct儲存中尤為明顯,這裡先介紹一種情況,以後接著補充。typedef unsigned char u8 typedef unsigned short u16 typedef unsigned long u32 typedef unsig...