記憶體對齊詳細解釋
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 這道題可能非常多同學都有誤區。不明確...