結構體的長度並不是簡單的將結構體中的成員長度相加而得,下面舉例說明如何計算機構體長度:
typedef struct example
sizeof(example)
的結果應該是8,而不是6;
vc++
中為結構體分配記憶體時,先分配一單位長度
(結構體中佔記憶體最多資料型別,如
int的長度
4),然後在該單位長度中依次為結構中的變數分配空間,直至該單位空間不能再分配完乙個完整的變數時為止,就再為該結構體分配另乙個單位長度的儲存空間。
將上面例子結構體中元素換一下位置:
typedef struct example
sizeof(example)
的結果變為12,所以在平時的程式設計中注意一下記憶體對齊可以節省記憶體。
結構體對齊(記憶體對齊
有的時候,在腦海中停頓了很久的 顯而易見 的東西,其實根本上就是錯誤的。就拿下面的問題來看 structt 使用sizeof t 將得到什麼樣的答案呢?要是以前,想都不用想,在32位機中,int是4個位元組,char是1個位元組,所以t一共是5個位元組。實踐出真知,在vc6中測試了下,答案確實8個位...
記憶體對齊 結構體對齊
現在已知32位機器上各種資料型別的長度如下 char 1 有符號無符號同 short 2 有符號無符號同 int 4 有符號無符號同 long 4 有符號無符號同 float 4 double 8 重要規則 1,複雜型別中各個成員按照它們被宣告的順序在記憶體中順序儲存,第乙個成員的位址和整個型別的位...
結構體的記憶體對齊
原則一 結構體中元素是按照定義順序乙個乙個放到記憶體中去的,但並不是緊密排列的。從結構體儲存的首位址開始,每乙個元素放置到記憶體中時,它都會認為記憶體是以它自己的大小來劃分的,因此元素放置的位置一定會在自己寬度的整數倍上開始 以結構體變數首位址為0計算 原則二 在經過第一原則分析後,檢查計算出的儲存...