最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言詳解熱門考點結構體內存對齊

 更新時間:2022年04月12日 08:06:25   作者:scut-ALong  
C?數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,結構是?C?編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲不同類型的數(shù)據(jù)項,本篇讓我們來了解C?的結構體內存對齊

一、為什么存在內存對齊

        大部分的參考資料都是如是說的:

        1.平臺原因(移植原因):不是所有的硬件平臺都能訪問任意地址上的任意數(shù)據(jù)的;某些硬件平臺只能再某些地址處取某些特定類型的數(shù)據(jù),否則拋出硬件異常。

        2.性能原因:數(shù)據(jù)結構(尤其是棧)應該盡可能地再自然邊界上對齊。原因在于,為了訪問未對其的內存,處理器需要作兩次內存訪問;而對齊的內存訪問僅需要一次訪問。

        總體來說:結構體的內存對齊是拿空間來換取時間的做法

二、如何計算?(考點)

        首先得掌握結構體得對齊規(guī)則:

1.第一個成員再與結構體變量偏移量為0得地址處。

2.其他成員變量要對齊到自身對齊數(shù)得整數(shù)倍得地址處。

  • 對齊數(shù) = 編譯器默認得一個對齊數(shù) 與 該成員大小的較小值 (VS中默認的值為8)

3.結構體總大小為最大對齊數(shù)(每個成員變量都有一個對齊數(shù))的整數(shù)倍。

4.如果嵌套了結構體的情況,嵌套的結構體對齊到自己的最大對齊數(shù)的整數(shù)倍處,結構體的整體大小就是所有最大對齊數(shù)(含嵌套結構體的對齊數(shù))的整數(shù)倍。

三、手撕代碼

        上面的干貨太干了是不是,小伙伴們可以多讀幾遍,結合下面練習把這塊知識點拿下。

練習1:

struct s1
{
	char c1;
	int i;
	char c2;
};
printf("%d\n", sizeof(struct s1)); //12

 練習2:

struct s2
{
	char c1;
	char c2;
	int i;
};
printf("%d\n", sizeof(struct s2)); //8

 練習3:

struct s3
{
	double d;
	char c;
	int i;
};
printf("%d\n", sizeof(struct s3)); //16

 練習4:

struct s4
{
	char c1; //0   
	struct s3 s; //8-23
	double d; //24-31
	
	int i;
};
printf("%d\n", sizeof(struct s4));//32

         這是嵌套結構體的情況,在內存中所占的每一位已標出(要32位,太多了就沒畫圖哈哈)。謝謝大家耐心讀到這里,如果這篇文章對你有所幫助,還請三連支持!

到此這篇關于C語言詳解熱門考點結構體內存對齊的文章就介紹到這了,更多相關C語言 內存對齊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

江山市| 封丘县| 哈尔滨市| 宕昌县| 前郭尔| 信丰县| 台江县| 尉氏县| 桂东县| 文安县| 上栗县| 如东县| 富宁县| 拜城县| 北安市| 盐亭县| 新丰县| 雷州市| 宜春市| 乌恰县| 涡阳县| 珲春市| 紫阳县| 石城县| 平陆县| 濮阳市| 喀什市| 青冈县| 靖西县| 西乌珠穆沁旗| 临沭县| 华阴市| 沂水县| 元氏县| 西乌| 龙南县| 胶州市| 南江县| 香港 | 贞丰县| 肇东市|