相同的結(jié)構(gòu)體成員,如果把順序調(diào)整一下,會(huì)不會(huì)影響結(jié)構(gòu)體的大小?
答案是會(huì)的,這主要跟字節(jié)對(duì)齊有關(guān)。
比如這樣的結(jié)構(gòu)體,前面兩個(gè)是 char 類型,后面跟上一個(gè) int 類型。
struct A { char a; charb; intc; };
它在內(nèi)存中的排序是這樣的,第一個(gè) char 占 1 個(gè)字節(jié),緊接著第 2 個(gè) char 也占 1 個(gè)字節(jié)。
因?yàn)樽詈笫莻€(gè) int 類型,所以中間還要空 2 個(gè)字節(jié)。要保證 int 的偏移是 4 的整數(shù)倍。
結(jié)構(gòu)體最終長度就是 8 個(gè)字節(jié)。
下面調(diào)整一下,把第 2 個(gè) char 放到 int 的后面。
struct B { char a; int b; char c; };
第一個(gè) char 任然占 1 個(gè)字節(jié),由于后面是 int,中間還得空 3 個(gè)字節(jié)。
最后的 char 占 1 個(gè)字節(jié)。
由于 int 的存在,結(jié)構(gòu)體的總長度必須是 4 的整數(shù)倍,所以結(jié)果就是 12。
成員的順序一旦變了,他們?cè)趦?nèi)存中的排布方式就會(huì)不一樣,結(jié)果也就不同。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3117瀏覽量
75153 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
130瀏覽量
11078
原文標(biāo)題:結(jié)構(gòu)體成員的順序會(huì)不會(huì)影響結(jié)構(gòu)體的大小
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
智能體AI面臨非結(jié)構(gòu)化數(shù)據(jù)難題:IBM推出解決方案
滲壓計(jì)在混凝土結(jié)構(gòu)體中的安裝指南

GLAD應(yīng)用:體全息光柵模擬
程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)
C語言中結(jié)構(gòu)體與聯(lián)合體的深度解析:內(nèi)存布局與應(yīng)用場景
全套C語言培訓(xùn)資料—PPT課件
深度了解SiC的晶體結(jié)構(gòu)

T-Core一體成型貼片電感的優(yōu)勢(shì)
談?wù)勔?b class='flag-5'>體成型貼片電感與普通貼片電感的差異
計(jì)算機(jī)程序的三種基本控制結(jié)構(gòu)是什么
IGBT器件的基本結(jié)構(gòu)和作用
帶你認(rèn)識(shí)貼片一體成型電感的材料結(jié)構(gòu)

評(píng)論