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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

结构体内存对齐原则

發(fā)布時間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结构体内存对齐原则 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先來說一下結(jié)構(gòu)體內(nèi)存對齊原則:

1、第一個成員在與結(jié)構(gòu)體偏移量為0的地址處。

2、其他成員變量要對齊到某個數(shù)字(對齊數(shù))的整數(shù)倍的地址處。
注意:對齊數(shù) = 編譯器默認(rèn)的一個對齊數(shù) 與 該成員大小的較小值。
VS中默認(rèn)的對齊數(shù)為8

3、結(jié)構(gòu)體總大小為:最大對齊數(shù)(所有變量類型最大者與默認(rèn)對齊參數(shù)取最小)的整數(shù)倍。

4、如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對齊到自己的最大對齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是所有最大對齊數(shù)(含嵌套結(jié)構(gòu)體的對齊數(shù))的整數(shù)倍。
接下來用代碼實際演示一次:

計算類A1時,大小并不是4+1=5字節(jié),是因為變量a占據(jù)了4個字節(jié),變量b占據(jù)一個字節(jié),此時為5個字節(jié),但是要遵循對齊原則中的第三條:

結(jié)構(gòu)體總大小為:最大對齊數(shù)(所有變量類型最大者與默認(rèn)對齊參數(shù)取最小)的整數(shù)倍。

默認(rèn)對齊數(shù)為8,所有變量類型最大者是int型為4,4的整數(shù)倍為8,所以類A1的字節(jié)大小為8。

計算類A2時,char類型變量b的大小為1,占據(jù)在結(jié)構(gòu)體偏移量為0的地址處,重點在于int a變量,它并不是在char類型后直接就占據(jù)了地址,int a變量在開辟空間的時候,他認(rèn)為內(nèi)存空間是為自己開辟的,所以存放的位置是在自己寬度的整數(shù)倍上開始的。

?如上圖所示,A2的大小為8字節(jié),但是和A1的8字節(jié)不是一種計算方法。

計算A3時,可能會根據(jù)前面的A2計算方法計算出為8+8+4=20,但是實際結(jié)果是24,原因還是要遵循最大對齊數(shù)的整數(shù)倍,最大對齊數(shù)為double型為8字節(jié),20不是8的整數(shù)倍,所以要向后延續(xù)到24字節(jié)。

以上內(nèi)容就是結(jié)構(gòu)體對齊原則,在C++的類中,如果類中有成員變量和成員函數(shù),只需要計算成員變量即可,空類占據(jù)一個字節(jié)。?

總結(jié)

以上是生活随笔為你收集整理的结构体内存对齐原则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。