C語言學習(四) 記憶體(位元組對齊與記憶體的種類)

2021-09-29 06:18:55 字數 557 閱讀 3827

位元組對齊

struct dat;

sizeof(dat)=8 ---- 利用空間換取效率,給char a 分配四個位元組大小的空間(編譯器在讀取的時候一次讀取四個位元組,取出結構體中的內容)

與定義的順序有關

struct dat;

struct dat1;

sizeof(dat)=8 ---- 給char a 分配四個位元組之後,他本身只佔乙個位元組,剩下三個位元組 shor b佔兩個位元組,足夠存放 就把a和b存放在一起 int c自己佔四個位元組

sizeof(dat1)=12 ----- 給char a 分配四個位元組之後,他本身只佔乙個位元組,剩下三個位元組 不足夠存放int c的四個位元組 所以總共是12個位元組的大小

記憶體分類

棧空間存放區域性變數

堆空間存放動態記憶體 由malloc 分配 由free釋放

資料段空間 靜態儲存區(data bss)

存放**段

存放唯讀字串常量(字串)

存放全域性變數

使用static修飾的區域性變數,編譯器會將其當成全域性變數看待 會將其放在資料段的空間裡

C語言 位元組對齊(記憶體對齊)

1 平台原因 移植原因 不是所有的硬體平台都能訪問任意位址上的任意資料,某些硬體平台只能在某些位址處取某些特定型別的資料,否則丟擲硬體異常 2 硬體原因 經過記憶體對齊之後,cpu的記憶體訪問速度大大提公升。1.對齊原則 原則1 資料成員對齊規則 結構 struct 或聯合 union 的資料成員,...

C語言記憶體位元組對齊

在c語言面試和考試中經常會遇到記憶體位元組對齊的問題。今天就來對位元組對齊的知識進行小結一下。首先說說為什麼要對齊。為了提高效率,計算機從記憶體中取資料是按照乙個固定長度的。以32位機為例,它每次取32個位,也就是4個位元組 每位元組8個位,計算機基礎知識,別說不知道 位元組對齊有什麼好處?以int...

C語言學習筆記 記憶體對齊

struct s1 struct s1 正常情況下應該是這樣儲存的,但是我們說過,cpu只能從特定的地方訪存。現在我們假設cpu只能從4的倍數處訪問記憶體。訪問char c1的時候從0 這裡的0指的是相對於結構體起始位址的偏移量,後續0位址均指偏移位址 位址處訪問 訪問int i的時候它只能先訪問四...