日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++对象长度之内存对齐(2)

發布時間:2025/3/21 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++对象长度之内存对齐(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 內存對齊
    • 例題a
    • 例題b
    • 例題c

內存對齊

在VC++6.0中,類和結構體中的數據成員是根據它們在類或結構體中出現的順序來依次申請申請內存空間的,由于內存對齊的原因,它們并不一定會像數組那樣連續地排列。由于數據類型的不同,因此占用的內存空間大小也會不同,因此占用的內存空間大小也會不同,在申請內存時,會遵守一定的規則。

要找對齊的話,我個人感覺應該先找到
編譯器的指定對齊值因為結構體中的當前數據成員類型長度為M,指定的對齊值是N,那么實際的對齊值為q=min(M,N),其成員的地址安排在q的倍數上。

但是,并非設定了默認對齊值就將結構體的對齊值鎖定。如果結構體中的數據成員類型最大值為M,指定的對齊值是N,那么實際對齊值為q=min(M,N)

三準則如下:
a.數據成員對其規則:結構(或聯合)的數據成員,第一個數據成員放在offset為0的地方,以后每個數據成員存儲的子成員大小(只要該成員有子成員,比如說是數組,結構體等)的整數倍開始(比如int 在32位機為4字節則要從4的整數倍地址開始存儲)

b.結構體作為成員:如果一個結構里有某些結構體成員,則結構體成員要從其內部最大元素的整數倍地址開始存儲.(struct a里存有 struct b,b里有 char ,int ,double 等元素,那b應該從8的整數倍開始存儲.)

c.收尾工作:結構體的總大小,也就是sizeof的結果,必須是其內部最大成員的整數倍,不足的要補齊

來舉一個最簡單的例子吧,請看截圖

例題a


這個int 類型數據占據四個存儲單元是 0~ 3(四個字節),但由于double 是8個字節,根據準則a,那么我們需要填充四個字節,從存儲單元8開始填double b,即存儲單元8~15是b的數據,所以存儲單元0 ~15是16個字節

例題b

此例題說明 準則二 和準則三的作用

在對象bq中,有 int a,double aa,char c,根據三準則中準則一,首先int a占 4字節(存儲單元0 ~ 3);然后根據準則二 double aa 排列的存儲單元是 8 ~ 15,char c排列的存儲單元是 16;根據準則三收尾功能填充,則對象bq占了24字節(最后0 ~ 23占了24個字節);

然后da對象中,有 char aa ,b a,int aaa,根據三準則中準則一,首先char aa 占一字節(存儲單元0);然后 根據準則二b a排列的存儲單元是 8 ~ 31,int aaa排列的存儲單元是32~35;根據準則三收尾功能,填充36 ~39(最后0 ~ 39占了40個字節);

提示:當結構體中以數組作為成員時,將根據數組元素的長度計算對齊值,而不是按數組的整體大小去計算,例題如下:

例題c

解釋:
在對象bq中,有double a[2],int aa,char c,根據三準則中準則一,首先double a[2]占 16字節(存儲單元0 ~ 15);然后根據準則一 int aa 排列的存儲單元是 16 ~ 19,char c排列的存儲單元是 20;根據準則三收尾功能填充,在這里我們需要討論了,如果用double 數組總長度來帶入準則三的話,那么應該為32,所以此排除;如果用double單個元素的長度來帶入準則三的話,那么符合
當然在這里還有同學肯定有疑問,如果我以 int aa 帶入準則三呢?(因為數組這種東西比較特殊,跟其它的有點不一樣,萬一特殊呢?對吧?)
所以的話,我已經準備好下面的東西來解釋了


哎呀,把int aa改成了char aa,還是24呀,那么是不是就驗證了我的說法呢?

好啦,這里告一段落,給大家來個題目,下面會輸出什么呢?

class b {double a; char c; }; void main() {b bq;int lengthbq = sizeof(bq); cout << lengthbq #pragma pack(N)用法如下所示:


VC++6.0 中可使用預編譯指令#pragma pack(N)來調整對齊大小,當上面把對齊值改過后,它并非原來的16字節,而是變成9字節。

使用pack修改對齊值也并非一定會生效,與默認對齊值一樣,對需要參考結構體中數據成員類型。當設定的對齊值大于結構體中的數據成員類型大小時,此對齊值是無效的。對齊值的計算流程換種說法是:將設定的對齊值與結構體中最大的基本類型數據成員的長度進行比較,取兩者之間的較小值。

如下
驗證以上說法

總結

以上是生活随笔為你收集整理的c++对象长度之内存对齐(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 猛男被粗大男男1069 | www.色呦呦| 狠狠干2020 | 日韩一区二区免费在线观看 | 久久九九久久九九 | 欧美久久网 | 黄色高清在线观看 | 在线视频中文字幕 | 不卡中文字幕av | jizz网站 | 亚洲激情自拍偷拍 | 欧美另类极品videosbest最新版本 | 天堂色综合 | 4438x亚洲最大 | 黄色网www| 一本色道久久综合狠狠躁的推荐 | 亚洲精品一区二区18漫画 | 超碰97成人 | 日本伦理片在线播放 | 欧美大白屁股 | 日本男人天堂网 | 日本高清黄色 | 亚洲无码国产精品 | 色天使在线视频 | 久久午夜网站 | 青青草婷婷 | 精品麻豆| 国产综合色视频 | 青青草久久伊人 | 亚洲精品乱码久久久久久日本蜜臀 | 日本黄色片在线播放 | 好吊妞视频一区二区三区 | 美女隐私无遮挡免费 | 成人国产一区二区三区精品麻豆 | 91视频这里只有精品 | 国产三级麻豆 | 鲁一鲁啪一啪 | 国产成人精品一区二区三区四区 | 极品人妻一区二区三区 | 日韩a级在线观看 | chinesepron hd videos国产91 | www插插插无码免费视频网站 | 欧美一级鲁丝片 | 国产精品成久久久久三级 | 成人免费看片载 | xxx一区| 欧美极品少妇xxxxⅹ免费视频 | 日本一区二区在线免费 | 自宅警备员在线观看 | 精品国偷自产一区二区三区 | 精品一性一色一乱农村 | 一区二区三区四区在线视频 | 秋霞在线视频 | 91久久国语露脸精品国产高跟 | 男人的天堂av网 | 日韩天堂视频 | 在线看片不卡 | 东北女人av | 欧美在线观看网站 | 精品欧美黑人一区二区三区 | 中文字幕人妻熟女人妻a片 麻豆91视频 | 久久av红桃一区二区小说 | 性猛交ⅹxxx富婆视频 | 99久精品 | 国产综合内射日韩久 | 超碰97在线资源 | 欧美黄色录像带 | 久久人人爽天天玩人人妻精品 | 99精品视频免费观看 | 欧美亚洲色图视频 | 日韩精品91| 波多野结衣之潜藏淫欲 | 国产一区二区精品在线 | 久久亚洲精品石原莉奈 | 公妇借种乱htp109cc | 亚洲第一欧美 | 国产思思99re99在线观看 | 性欧美13一14内谢 | 精品国产999 | 国产激情小视频 | √天堂在线 | 一本一道久久a久久 | 国产三级一区二区 | 成人av电影网站 | 久久久久久久久久国产精品 | 久久黄色| 国产免费无码XXXXX视频 | 日本精品一区二区在线观看 | 91热久久| 色xxxxxx| 在线国产播放 | 申鹤乳液狂飙 | 性色AV无码久久一区二区三 | 伦乱天堂 | 制服.丝袜.亚洲.另类.中文 | 天天天天天天操 | 好吊色在线视频 | 天堂www中文在线资源 | 国产91久久婷婷一区二区 |