中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++中的結構體內存怎么對齊

發布時間:2020-12-17 16:33:48 來源:億速云 閱讀:164 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關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++中的結構體內存怎么對齊有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

抚远县| 海安县| 青田县| 镶黄旗| 化德县| 松桃| 堆龙德庆县| 阳春市| 铁岭市| 房产| 宜丰县| 兴城市| 新野县| 孟村| 景德镇市| 肥乡县| 奉新县| 达州市| 科技| 和林格尔县| 永川市| 甘洛县| 黄浦区| 团风县| 若羌县| 且末县| 榕江县| 双牌县| 龙岩市| 当涂县| 阿拉尔市| 广元市| 黎平县| 安福县| 丹凤县| 阿尔山市| 都兰县| 八宿县| 扶沟县| 阿图什市| 平邑县|