sizeof的對結構體的大小計算

2021-06-14 02:10:33 字數 696 閱讀 1330

#include

using namespace std;

structa;

structb;

structc;

void main()

c;結果為:

8  8

16consider why?

經過查閱資料發現,

1、預設情況下,為方便對結構體內元素的訪問與管理,當結構體內的元素的長度都小於處理器

的位數的時候,便以結構體裡面最長的資料元素為對齊單位,也就是說,結構體的長度一定是最長的資料元素的整數倍。

2、再考慮,為什麼結構體c裡面不同型別資料換了位置,sizeof的結構就不同了呢,原因如下:

cpu的優化原則如下:對於n位元組的元素,n=2,4,6,8....,它的首位址能被n整除,才能獲得最好的效能,因此對於每乙個變數,

可以從當前位置向後找到第乙個滿足這個條件的位址為首位址。

char c1;   int c2;long c3;short c4;  對於這個排序,記憶體位址如果按0號位址開始,每個變數首位址應該是 0(0),4(4-7),8(8-11),12(12-13),所以應該是16,最終必須是4的整數倍

int c2;long c3;short c4; char c1;對於這個排序,記憶體位址如果按0號位址開始,每個變數首位址應該是 0(0-1),4(4-7),8(8-9),10(10),所以應該是12,最終必須是4的整數倍

結構體的大小計算

結構體是c語言的一種資料型別,是一種多種基本資料型別混合的型別。既然他是資料型別,那麼就有資料型別在記憶體中所佔位元組數,即大小。如何計算資料型別的大小呢?是簡單的將乙個個簡單資料型別的大小相加嗎?還是有自己特殊的儲存方式?我們這裡先通過舉多個例子來看看實際執行的結果,然後再討論規律。struct ...

結構體大小計算

c語言 結構體大小計算 個人標籤啥東東封尾機 參考 一 結構體變數中成員的偏移量必須是成員大小的整數倍 0被認為是任何數的整數倍 eg typedef struct stu4 stu4 typedef struct stu5 stu4 這兩個結構體大小都為8 已驗證 二 結構體大小必須是所有成員大小...

結構體大小計算

結構體中的成員可以是不同的資料型別,成員按照定義時的順序依次儲存在連續的記憶體空間。和陣列不一樣的是,結構體的大小不是所有成員大小簡單的相加,需要考慮到系統在儲存結構體變數時的位址對齊問題。看下面這樣的乙個結構體 struct stu1 先介紹乙個相關的概念 偏移量。偏移量指的是結構體變數中成員的位...