亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

介休市| 鹤峰县| 广宗县| 平顶山市| 古浪县| 双江| 香格里拉县| 长乐市| 黑山县| 民和| 东海县| 黄浦区| 罗城| 曲靖市| 虎林市| 武功县| 滨州市| 琼结县| 珲春市| 阜宁县| 嘉禾县| 玛纳斯县| 保德县| 北川| 沾益县| 利辛县| 江西省| 佳木斯市| 克什克腾旗| 尚志市| 二手房| 阿勒泰市| 遂宁市| 三门县| 绥阳县| 桦川县| 重庆市| 安庆市| 商城县| 专栏| 乐清市|