相同的結(jié)構(gòu)體成員,如果把順序調(diào)整一下,會(huì)不會(huì)影響結(jié)構(gòu)體的大?。?/p>
答案是會(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)注
9文章
3174瀏覽量
76168 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
131瀏覽量
11307
原文標(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)先 登錄
一個(gè)經(jīng)典的結(jié)構(gòu)體和聯(lián)合體共用的實(shí)例
一體成型電感的制作工序簡(jiǎn)述
結(jié)構(gòu)體聲明與定義
typedef結(jié)構(gòu)體使用
為什么不建議用匿名結(jié)構(gòu)體
C語(yǔ)言的編程技巧
控制結(jié)構(gòu)介紹
C語(yǔ)言結(jié)構(gòu)體使用
定義IO初始化結(jié)構(gòu)體
滲壓計(jì)在混凝土結(jié)構(gòu)體中的安裝指南

結(jié)構(gòu)體成員的順序會(huì)影響結(jié)構(gòu)體的大小嗎
評(píng)論