狠狠色丁香婷婷久久综合麻豆,国产99久久久久久免费看,与亲女洗澡时伦了视频,一面膜胸口一面膜下免费

c語言|結構體內存對齊-創新互聯

作者:佳佳要學習
時間:2022年9月25日
本章內容:結構體內存對齊
作者想說:如本文有錯誤之處,可以留言,感謝!

10年積累的成都網站設計、成都網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站設計后付款的網站建設流程,更有漢陽免費網站建設讓你可以放心的選擇與我們合作。

目錄
  • 一、學習小例子
    • 1. 思考代碼
    • 2. VS2019運行結果
    • 圖解
  • 二、了解對其規則
  • 三、存在此規則的原因

一、學習小例子 1. 思考代碼

定義了兩個結構體S1與S2,成員變量只有順序不一致。
當在計算兩個結構體的占內存大小的時候,會有什么區別呢?

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運行結果

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

在這里插入圖片描述

圖解

在這里插入圖片描述


二、了解對其規則

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

**加粗樣式**

擴展:
offsetof:用來計算結構體成員相對于起始位置的偏移量。

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

在這里插入圖片描述

解釋:
c1成員char類型占1個字節,偏移量為0。
i 成員int類型占4個字節,vs編輯器默認為8字節,選較小值:4
因為,在偏移量1處不是整數倍的地址處。
所以,一直往下找,找到偏移量4處,開始存放4個字節的i成員變量。

在這里插入圖片描述

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

在這里插入圖片描述

c2最后占在了9偏移量處
結構體總大小為大對齊數:4
不滿足,第三條。

所以要繼續往下找,找到12偏移量處
得到該結構體占內存大小:12

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

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 :占一個字節,偏移量:0
s3是一個結構體(共占16字節),結構體成員大是:8字節,
所以,我們需要從8開始,進行存放s3成員變量。

d是float類型,從24偏移量處開始,24是8的倍數。
從24開始存放d的變量,占8個字節

一共是32個字節

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

那在設計結構體的時候,我們既要滿足對齊,又要節省空間,如何做到:讓占用空間小的成員盡量集中在一起。

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

標題名稱:c語言|結構體內存對齊-創新互聯
當前路徑:http://www.hntjjpw.com/article42/edphc.html

成都網站建設公司_創新互聯,為您提供做網站Google網站設計品牌網站設計用戶體驗網站導航

廣告

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

成都網頁設計公司
主站蜘蛛池模板: 巩义市| 太白县| 龙口市| 慈利县| 迁安市| 山东省| 湖州市| 荆州市| 卓资县| 车致| 武川县| 松滋市| 苍南县| 昌图县| 新绛县| 拉萨市| 马尔康县| 兴安县| 利津县| 英吉沙县| 武威市| 绿春县| 江陵县| 富平县| 华容县| 洪洞县| 柞水县| 休宁县| 哈密市| 辰溪县| 阿拉善盟| 嘉义市| 万载县| 紫云| 惠州市| 东乌珠穆沁旗| 永昌县| 广灵县| 新邵县| 乡城县| 博白县|