相同的結(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)體最終長(zhǎng)度就是 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)體的總長(zhǎng)度必須是 4 的整數(shù)倍,所以結(jié)果就是 12。
成員的順序一旦變了,他們?cè)趦?nèi)存中的排布方式就會(huì)不一樣,結(jié)果也就不同。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3060瀏覽量
74353 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
130瀏覽量
10872
原文標(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)先 登錄
相關(guān)推薦
評(píng)論