欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語言|結(jié)構(gòu)體內(nèi)存對(duì)齊-創(chuàng)新互聯(lián)

作者:佳佳要學(xué)習(xí)
時(shí)間:2022年9月25日
本章內(nèi)容:結(jié)構(gòu)體內(nèi)存對(duì)齊
作者想說:如本文有錯(cuò)誤之處,可以留言,感謝!

10年積累的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有漢陽免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

目錄
  • 一、學(xué)習(xí)小例子
    • 1. 思考代碼
    • 2. VS2019運(yùn)行結(jié)果
    • 圖解
  • 二、了解對(duì)其規(guī)則
  • 三、存在此規(guī)則的原因

一、學(xué)習(xí)小例子 1. 思考代碼

定義了兩個(gè)結(jié)構(gòu)體S1與S2,成員變量只有順序不一致。
當(dāng)在計(jì)算兩個(gè)結(jié)構(gòu)體的占內(nèi)存大小的時(shí)候,會(huì)有什么區(qū)別呢?

struct S1
{char c1;
	int i;
	char c2;
};
struct S2
{char c1;
	char c2;
	int i;
};

int main()
{struct S1 s1;
	printf("%d\n", sizeof(struct S1));
	printf("%d\n", sizeof(struct S2));
	return 0;
}
2. VS2019運(yùn)行結(jié)果

來,看一下!
S1 居然 比 S2 大了 4個(gè)字節(jié)!
那是為什么呢???

在這里插入圖片描述

圖解

在這里插入圖片描述


二、了解對(duì)其規(guī)則

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

**加粗樣式**

擴(kuò)展:
offsetof:用來計(jì)算結(jié)構(gòu)體成員相對(duì)于起始位置的偏移量。

2.其他成員變量要對(duì)齊到某個(gè)數(shù)字(對(duì)齊數(shù))的整數(shù)倍的地址處。
對(duì)齊數(shù) = 編譯器默認(rèn)的一個(gè)對(duì)齊數(shù) 與 該成員大小的較小值。

在這里插入圖片描述

解釋:
c1成員char類型占1個(gè)字節(jié),偏移量為0。
i 成員int類型占4個(gè)字節(jié),vs編輯器默認(rèn)為8字節(jié),選較小值:4
因?yàn)椋谄屏?處不是整數(shù)倍的地址處。
所以,一直往下找,找到偏移量4處,開始存放4個(gè)字節(jié)的i成員變量。

在這里插入圖片描述

3.結(jié)構(gòu)體總大小為大對(duì)齊數(shù)(每個(gè)成員變量都有一個(gè)對(duì)齊數(shù))的整數(shù)倍。

在這里插入圖片描述

c2最后占在了9偏移量處
結(jié)構(gòu)體總大小為大對(duì)齊數(shù):4
不滿足,第三條。

所以要繼續(xù)往下找,找到12偏移量處
得到該結(jié)構(gòu)體占內(nèi)存大小:12

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

struct S3
{double d; //8
	char c;   //1
	int i;    //4
};


struct S4
{char c1; //1
	struct S3 s3;  //16
	double d;  //8
};
int main()
{printf("%d\n", sizeof(struct S4));
	return 0;
}

在這里插入圖片描述

c1 :占一個(gè)字節(jié),偏移量:0
s3是一個(gè)結(jié)構(gòu)體(共占16字節(jié)),結(jié)構(gòu)體成員大是:8字節(jié),
所以,我們需要從8開始,進(jìn)行存放s3成員變量。

d是float類型,從24偏移量處開始,24是8的倍數(shù)。
從24開始存放d的變量,占8個(gè)字節(jié)

一共是32個(gè)字節(jié)

三、存在此規(guī)則的原因
  1. 平臺(tái)原因(移植原因):
    不是所有的硬件平臺(tái)都能訪問任意地址上的任意數(shù)據(jù)的;某些硬件平臺(tái)只能在某些地址處取某些特定類型的數(shù)據(jù),否則拋出硬件異常。
  1. 性能原因:
    數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能地在自然邊界上對(duì)齊。
    原因在于,為了訪問未對(duì)齊的內(nèi)存,處理器需要作兩次內(nèi)存訪問;而對(duì)齊的內(nèi)存訪問僅需要一次訪問。
    結(jié)構(gòu)體的內(nèi)存對(duì)齊是拿空間來換取時(shí)間的做法。

那在設(shè)計(jì)結(jié)構(gòu)體的時(shí)候,我們既要滿足對(duì)齊,又要節(jié)省空間,如何做到:讓占用空間小的成員盡量集中在一起。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

標(biāo)題名稱:c語言|結(jié)構(gòu)體內(nèi)存對(duì)齊-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://chinadenli.net/article42/edphc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站Google網(wǎng)站設(shè)計(jì)品牌網(wǎng)站設(shè)計(jì)用戶體驗(yàn)網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司