91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

泰和县| 刚察县| 保康县| 梓潼县| 尉氏县| 天祝| 洛南县| 津市市| 左云县| 大邑县| 中西区| 太湖县| 保靖县| 普定县| 海晏县| 湟中县| 台南县| 涞源县| 额济纳旗| 赣州市| 连江县| 全椒县| 洮南市| 西安市| 县级市| 云梦县| 长治县| 普定县| 大庆市| 沧源| 宜章县| 宿州市| 和田市| 平潭县| 林周县| 彰武县| 福贡县| 北票市| 台前县| 泾阳县| 怀来县|