記憶體對齊詳細解釋

2021-09-07 03:22:35 字數 1080 閱讀 9555

記憶體對齊詳細解釋

1、分析說明:

輸出結果:sizeof(structtest_t) = 10 [兩個編譯器輸出一致]

分析過程:

#pragmapack(2)

structtest_t ;

#pragmapack()

成員總大小

=9總體對齊係數=min((max(int,short,char), 2) = 2

總體大小

(size)=$(

成員總大小)按

$(總體對齊係數)圓整

2、實際樣例:

樣例:

#include #include #include /*

先是依照#pragmapack(2)引數依次和資料成員比較:依照兩者之中小者對齊;

最後再依照#pragmapack(2)引數與結構體成員佔空間最大者比較,總體的長度是小者的倍數;

*/#pragma pack(4)

struct test_1 ;

#pragma pack()

#pragma pack(2)

struct test_2 ;

#pragma pack()

int main(int argc, char *argv)

3、sizeof()測試結果:int (*ptr)[3]; //ptr代表指標,因此測得值為4

int *ptr[3]; //ptr代表陣列名,每乙個成員是int * 。因此佔3個*4=12

ptr代表陣列名時,測得是陣列所佔記憶體空間的大小

ptr代表指標名時,測得是指標變空間由記憶體大小佔用量

關於記憶體對齊詳細解釋

什麼是記憶體對齊?在用sizeof運算子求算某結構體所佔空間時,並不是簡單地將結構體中所有元素各自的空間相加,這裡涉及到記憶體對齊的問題。訪問未對齊的記憶體,處理器需要訪問兩次 資料先讀高位再讀低位然後進行拼接 而訪問對齊的記憶體,只需要一次。為了提高效率,所以進行記憶體對齊。windows的預設對...

記憶體對齊 記憶體對齊規則解釋 記憶體對齊原理

一 記憶體對齊的原因 我們都知道計算機是以位元組 byte 為單位劃分的,理論上來說cpu是可以訪問任一編號的位元組資料的,我們又知道cpu的定址其實是通過位址匯流排來訪問記憶體的,cpu又分為32位和64位,在32位的cpu一次可以處理4個位元組 byte 的資料,那麼cpu實際定址的步長就是4個...

結構體內存對齊具體解釋

在32位機器上 設有以下說明和定義 1234567891011 typedef union date struct data too date max 則語句 printf d sizeof struct data sizeof max 的執行結果是 答案 52 這道題可能非常多同學都有誤區。不明確...