C語(yǔ)言結(jié)構(gòu)體內(nèi)存對(duì)齊詳解
1、結(jié)構(gòu)體內(nèi)存對(duì)齊是指當(dāng)我們創(chuàng)建一個(gè)結(jié)構(gòu)體變量時(shí),會(huì)向內(nèi)存申請(qǐng)所需的空間,用來(lái)存儲(chǔ)結(jié)構(gòu)體成員的內(nèi)容。我們可以將其理解為結(jié)構(gòu)體成員會(huì)按照特定的規(guī)則來(lái)存儲(chǔ)數(shù)據(jù)內(nèi)容。
2、結(jié)構(gòu)體的對(duì)齊規(guī)則
(1)第一個(gè)成員在相比于結(jié)構(gòu)體變量存儲(chǔ)起始位置偏移量為0的地址處。
(2)從第二個(gè)成員開(kāi)始,在其自身對(duì)齊數(shù)的整數(shù)倍開(kāi)始存儲(chǔ)(對(duì)齊數(shù)=編譯器默認(rèn)對(duì)齊數(shù)和成員字節(jié)大小的最小值,VS編譯器默認(rèn)對(duì)齊數(shù)為8)。
(3)結(jié)構(gòu)體變量所用總空間大小是成員中最大對(duì)齊數(shù)的整數(shù)倍。
(4)當(dāng)遇到嵌套結(jié)構(gòu)體的情況,嵌套結(jié)構(gòu)體對(duì)齊到其自身成員最大對(duì)齊數(shù)的整數(shù)倍,結(jié)構(gòu)體的大小為當(dāng)下成員最大對(duì)齊數(shù)的整數(shù)倍。
3、了解了結(jié)構(gòu)體的對(duì)齊規(guī)則后,我們通過(guò)實(shí)戰(zhàn)來(lái)鞏固(實(shí)例一至實(shí)例三同類,請(qǐng)細(xì)品實(shí)例四)
實(shí)例一:

分析:存儲(chǔ)結(jié)構(gòu)圖如下
紅色填充內(nèi)存為結(jié)構(gòu)體成員a,因其為char類型且是第一個(gè)成員,由規(guī)則(1)可得如下;橙色填充為結(jié)構(gòu)體成員b,因其為int類型且不是第一個(gè)成員,由規(guī)則(2)可得如下;綠色填充為結(jié)構(gòu)體成員c,因其為char類型且不是第一個(gè)成員,由規(guī)則(2)(3)可得如下;畫(huà)紅叉內(nèi)存位置屬于因?qū)R造成的浪費(fèi)內(nèi)存。

實(shí)例二:

分析:存儲(chǔ)結(jié)構(gòu)如下
紅色填充內(nèi)存為結(jié)構(gòu)體成員a,因其為char類型且是第一個(gè)成員,由規(guī)則(1)可得如下;橙色填充為結(jié)構(gòu)體成員b,因其為char類型且不是第一個(gè)成員,由規(guī)則(2)可得如下;綠色填充為結(jié)構(gòu)體成員c,因其為int類型且不是第一個(gè)成員,由規(guī)則(2)(3)可得如下;畫(huà)紅叉內(nèi)存位置屬于因?qū)R造成的浪費(fèi)內(nèi)存。

實(shí)例三:

分析:存儲(chǔ)結(jié)構(gòu)如下
紅色填充內(nèi)存為結(jié)構(gòu)體成員a,因其為double類型且是第一個(gè)成員,由規(guī)則(1)可得如下;橙色填充為結(jié)構(gòu)體成員b,因其為char類型且不是第一個(gè)成員,由規(guī)則(2)可得如下;綠色填充為結(jié)構(gòu)體成員c,因其為int類型且不是第一個(gè)成員,由規(guī)則(2)(3)可得如下;畫(huà)紅叉內(nèi)存位置屬于因?qū)R造成的浪費(fèi)內(nèi)存。

實(shí)例四:

分析:存儲(chǔ)結(jié)構(gòu)圖如下
紅色填充內(nèi)存為結(jié)構(gòu)體成員a,因其為double類型且是第一個(gè)成員,由規(guī)則(1)可得如下;橙色填充為結(jié)構(gòu)體成員s3,因其為嵌套結(jié)構(gòu)體且不是第一個(gè)成員,大小為16,由規(guī)則(4)可得如下圖;綠色填充為結(jié)構(gòu)體成員c,因其為int類型且不是第一個(gè)成員,由規(guī)則(2)(3)可得如下;畫(huà)紅叉內(nèi)存位置屬于因?qū)R造成的浪費(fèi)內(nèi)存。

總結(jié)
到此這篇關(guān)于C語(yǔ)言結(jié)構(gòu)體內(nèi)存對(duì)齊詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言結(jié)構(gòu)體內(nèi)存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解C語(yǔ)言如何計(jì)算結(jié)構(gòu)體大小(結(jié)構(gòu)體的內(nèi)存對(duì)齊)
- C語(yǔ)言程序中結(jié)構(gòu)體的內(nèi)存對(duì)齊詳解
- C語(yǔ)言中結(jié)構(gòu)體的內(nèi)存對(duì)齊規(guī)則講解
- C語(yǔ)言 詳細(xì)分析結(jié)構(gòu)體的內(nèi)存對(duì)齊
- C語(yǔ)言結(jié)構(gòu)體中內(nèi)存對(duì)齊的問(wèn)題理解
- C語(yǔ)言熱門考點(diǎn)結(jié)構(gòu)體與內(nèi)存對(duì)齊詳解
- C語(yǔ)言中結(jié)構(gòu)體與內(nèi)存對(duì)齊實(shí)例解析
- C語(yǔ)言結(jié)構(gòu)體內(nèi)存對(duì)齊問(wèn)題小結(jié)
相關(guān)文章
C++控制臺(tái)實(shí)現(xiàn)簡(jiǎn)單注冊(cè)登錄
這篇文章主要為大家詳細(xì)介紹了C++控制臺(tái)實(shí)現(xiàn)簡(jiǎn)單注冊(cè)登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
解析C語(yǔ)言基于UDP協(xié)議進(jìn)行Socket編程的要點(diǎn)
這篇文章主要介紹了C語(yǔ)言通過(guò)UDP協(xié)議進(jìn)行Socket編程的要點(diǎn),文中還提到了相關(guān)ARP與ICMP協(xié)議的作用,需要的朋友可以參考下2016-02-02
基于C++詳解數(shù)據(jù)結(jié)構(gòu)(附帶例題)
數(shù)據(jù)結(jié)構(gòu)作為每一個(gè)IT人不可回避的問(wèn)題,本文基于C++編寫(xiě),下面這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
C語(yǔ)言實(shí)現(xiàn)旅游景點(diǎn)咨詢系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)旅游景點(diǎn)咨詢系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12

