C語言 位元組對齊

2021-08-30 19:45:48 字數 990 閱讀 6149

你是否有觀察過結構體中資料變數所佔的位元組數,以及結構體所佔的位元組數?

如:

圖1                                               圖2                                           圖三

你是否知道圖1,2,3中結構體所佔的位元組數麼?

在此之前,我們需要知道在32位作業系統上,int 佔 4位元組,char 佔 1 位元組,因此你可能會說,圖一結構體占有2 位元組,圖二結構體占有 3 位元組,圖三結構體占 1+1+1+4+1=8位元組,如果是這樣,可能你沒有了解到 一種 說法 「位元組對齊」

所謂 位元組對齊 是指 以使 cpu 儲存速度更快,提高效能  為目的,對 結構體 內部排列 做的一種 調整。

在一般情況下:

char 型 偏移量 為sizeof(char)即 1 的 倍數, short 型  偏移量 為sizeof(short)即 2 的 倍數

int 型 偏移量 為sizeof(int)即 4 的 倍數,float 型 偏移量 為 sizeof(float)即 4 的 倍數

double 型偏移量 為 sizeof(double)即 8 的 倍數

因此在 一般情況下:圖一為 2 位元組,圖二 為 3 位元組,圖三 為 12 位元組。具體看下方示意圖:

但在特殊情況下也可以改變 位元組對齊的方式

如:使用 #pragmapack(n) 可以改變 以 n 位元組對齊, 具體請 參考 (

c語言位元組對齊

現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。基本資料型別自身對齊,也叫自然對齊。就是說...

C語言位元組對齊

一 概念 對齊跟資料在記憶體中的位置有關。如果乙個變數的記憶體位址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設乙個整型變數的位址為0x00000004,那它就是自然對齊的。二 為什麼要位元組對齊 需要位元組對齊的根本原因在於cpu訪問資料的效率問題。假設上面整型變數的位址不...

C語言位元組對齊

一 概念 對齊跟資料在記憶體中的位置有關。如果乙個變數的記憶體位址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設乙個整型變數的位址為0x00000004,那它就是自然對齊的。二 為什麼要位元組對齊 在c語言中,結構是一種復合資料型別,其構成元素既可以是基本資料型別 如int ...