11 18 結構體內存對齊

2021-10-10 19:55:46 字數 873 閱讀 1008

結構體

1.什麼是結構體

結構體簡單來說就是一種新的自定義型別

2.為什麼需要有結構體的型別

內建型別並不能表示所有的場景,比如:學生群體,描述學生:name,gender,age,height

3.結構體內存對齊:作業系統在訪問記憶體時,從固定倍數字址的位置開始訪問

4.結構體如何進行對齊

(1)使結構體中每個成員變數都處在對齊的位址上

注意:結構體中第乙個成員變數使用在對齊的位置上,對於剩餘變數,對齊:min(該變數型別,預設對齊數),然後檢測該變數相對於結構體起始位置的偏移量是不是該min的整數倍,是:對齊了,否:需要在其之後補位元組–剛好是min的整數倍

注意:在vs上預設對齊數是8

(2)讓結構體整體來對齊

第一步中已經初步計算出了乙個大小size,min(找結構體中成員型別最大者,預設對齊數),檢測size是否為min的最小值–>是:對齊,否:調整到最小整數倍

(考慮每個成員變數,考慮結構體的整體)

大小端

1.概念

大端:是指資料的低位儲存在記憶體的高位址中,高位儲存在低位址中;

小端:是指資料的低位儲存在記憶體的低位址中,高位儲存在高位址中;

2.大小端與作業系統沒有關係,和cpu架構有關

3.如何測試乙個機器為大端還是小端

(1)定義乙個int變數,將其位址強制轉換為char*型位址,檢測該位址中的資料若是int變數的最低位元組,則是小端機,反之則為大端機。

(2)通過讀取同一位址的整型資料和字元資料來區別大小端

(3)通過union的共享記憶體特性,來判斷機器是大端還是小端

結構體內存對齊

結構體內存對齊 一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這...

結構體內存對齊

一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的...

結構體內存對齊

對齊規則 每個特定平台上的編譯器都有自己的預設 對齊係數 也叫對齊模數 程式設計師可以通過預編譯命令 pragma pack n n 1,2,4,8,16來改變這一係數,其中的n就是你要指定的 對齊係數 規則 1 資料成員對齊規則 結構 struct 的資料成員,第乙個資料成員放在offset為0的...