您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關c++中的結構體內存怎么對齊,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
各成員變量存放的起始地址相對于結構的起始地址的偏移量必須為該變量的類型所占用的字節數的倍數, 各成員變量在存放的時候根據在結構中出現的順序依次申請空間 同時按照上面的對齊方式調整位置。 空缺的字節自動填充, 同時為了確保結構的大小為結構的字節邊界數(即該結構中占用最大的空間的類型的字節數)的倍數,所以在為最后一個成員變量申請空間后 還會根據需要自動填充空缺的字節;
#include <iostream> using namespace std; #pragma pack(8) struct Test1 { char a; //0 - 1 short b;//2 - 3 int c;// 4 - 7 float d;//8 - 11 double e;//12 - 23 }; #pragma pack(4) struct Test2 { char a; //0 - 1 short b;//2 - 3 int c;// 4 - 7 float d;//8 - 11 double e;//12 - 19 }; #pragma pack(8) struct Test3 { double e;//0-7 float d;//8-13 short b;//14-15 int c;// 16-19 char a; //20-23 }; int main() { std::cout << "size test1= " << sizeof(Test1) << std::endl; std::cout << "size test2= " << sizeof(Test2) << std::endl; std::cout << "size test3= " << sizeof(Test3) << std::endl; return 0; }
1)第一個成員在與結構體偏移量為0的地址處。
2)其他成員變量要對齊到某個數字(對齊數)的整數倍的地址處。
注意:對齊數 = 編譯器默認的一個對齊數 與 該成員大小的較小值。
VS中默認的對齊數為8,gcc中的對齊數為4
3)結構體總大小為:最大對齊數(所有變量類型最大者與默認對齊參數取最小)的整數倍。
4)如果嵌套了結構體的情況,嵌套的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含嵌套結構體的對齊數)的整數倍。
看完上述內容,你們對c++中的結構體內存怎么對齊有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。