結構體內存對齊規則是什麼?

2021-08-04 02:30:43 字數 855 閱讀 1970

struct t; t *p;

在64位系統以及64位編譯器下,以下描述正確的是:

a.sizeof(p) == 24

b.sizeof(*p) == 24

c.sizeof(p ->a) == 1

d.sizeof(p->e) == 8

語法格式:

sizeof 有三種語法形式

1) 用於資料型別

sizeof( type_name ); // sizeof( 型別 );

2) 用於變數

sizeof ( object ); // sizeof( 物件 );

sizeof object; // sizeof 物件

位域是指資訊在儲存時,並不需要占用乙個完整的位元組, 而只需佔幾個或乙個二進位制位,int c:16 表示只佔16位

原則一:結構體中元素是按照定義順序乙個乙個放到記憶體中去的,但並不是緊密排列的。從結構體儲存的首位址開始,每乙個元素放置到記憶體中時,它都會認為記憶體是以它自己的大小來劃分的,因此元素放置的位置一定會在自己寬度的整數倍上開始(以結構體變數首位址為0計算)。

原則二:在經過第一原則分析後,檢查計算出的儲存單元是否為所有元素中最寬的元素的長度的整數倍,是,則結束;若不是,則補齊為它的整數倍。

a.sizeof(p) p為指標,在64位系統下佔8位元組

b.sizeof(*p) 即整個結構體大小,根據對其規則:

所以sizeof(*p) == 32;

c:sizeof(p - >a) == 1;

d:sizeof(p - > e) == 8;

結構體內存對齊規則

今天又聽了一遍結構體內存對齊規則,明白了 按照結構體內存規則來計算,再遇到結構體套結構體或結構體套陣列的情況,也能計算清楚。include stdafx.h include include include include struct tagtest 結構成員的對齊開始位址由結構成員size和預設對...

結構體內存對齊規則

記憶體對齊是出於提高記憶體訪問效率的考慮,其記憶體對齊規則如下 1 結構體中第乙個成員的位址偏移 offset 為0 2 其餘成員按照定義順序,其位址偏移量為各自對齊數的整數倍 3 最終結構體的整體大小為其最大對齊數的整數倍,不足在末尾補齊。4 對於內部巢狀了結構體的情況,其對齊數為該內嵌結構體的最...

結構體內存對齊規則

4.補充 5.總結 宣告乙個結構體型別,它所佔位元組為所有成員的位元組的總和?顯然是錯誤的基本的資料型別有char int double float。這個條件是很重要的,當你把結構體所佔記憶體位元組數算出來以後,你不要立即下結論,這個時候你要看看此時的值是否為最寬基本資料型別大小的整數倍。而往往有人...