久久99热66热这里只有精品,特黄特色的大片在线观看,亚洲日本三级在线观看,国产三级农村妇女在线,亚洲av毛片免费在线观看,哺乳叫自慰在线看,天天干美女av网

一道計算機筆試題

時間:2024-09-05 13:59:02 資料大全 我要投稿
  • 相關(guān)推薦

一道計算機筆試題

#pragma pack(8)
struct s1
{
short a;
long b;
};
struct s2
{
char c;
  s1 d;
  long long e;
};
#pragma pack()

一道計算機筆試題

問:
1.sizeof(s2) = ?
2.s2的c后面空了幾個字節(jié)接著是d?

答案:

sizeof(S2)結(jié)果為24.
成員對齊有一個重要的條件,即每個成員分別對齊.即每個成員按自己的方式對齊.
也就是說上面雖然指定了按8字節(jié)對齊,但并不是所有的成員都是以8字節(jié)對齊.其對齊的規(guī)則是,每個成員按其類型的對齊參數(shù)(通常是這個類型的大小)和指定對齊參數(shù)(這里是8字節(jié))中較小的一個對齊.并且結(jié)構(gòu)的長度必須為所用過的所有對齊參數(shù)的整數(shù)倍,不夠就補空字節(jié).
S1中,成員a是1字節(jié)默認按1字節(jié)對齊,指定對齊參數(shù)為8,這兩個值中取1,a按1字節(jié)對齊;成員b是4個字節(jié),默認是按4字節(jié)對齊,這時就按4字節(jié)對齊,所以sizeof(S1)應(yīng)該為8;
S2中,c和S1中的a一樣,按1字節(jié)對齊,而d 是個結(jié)構(gòu),它是8個字節(jié),它按什么對齊呢?對于結(jié)構(gòu)來說,它的默認對齊方式就是它的所有成員使用的對齊參數(shù)中最大的一個,S1的就是4.所以,成員d就是按4字節(jié)對齊.成員e是8個字節(jié),它是默認按8字節(jié)對齊,和指定的一樣,所以它對到8字節(jié)的邊界上,這時,已經(jīng)使用了12個字節(jié)了,所以又添加了4個字節(jié)的空,從第16個字節(jié)開始放置成員e.這時,長度為24,已經(jīng)可以被8(成員e按8字節(jié)對齊)整除.這樣,一共使用了24個字節(jié).
                          a    b
S1的內(nèi)存布局:11**,1111,
                          c    S1.a S1.b     d
S2的內(nèi)存布局:1***,11**,1111,****11111111

這里有三點很重要:
1.每個成員分別按自己的方式對齊,并能最小化長度
2.復(fù)雜類型(如結(jié)構(gòu))的默認對齊方式是它最長的成員的對齊方式,這樣在成員是復(fù)雜類型時,可以最小化長度
3.對齊后的長度必須是成員中最大的對齊參數(shù)的整數(shù)倍,這樣在處理數(shù)組時可以保證每一項都邊界對齊

補充一下,對于數(shù)組,比如:
char a[3];這種,它的對齊方式和分別寫3個char是一樣的.也就是說它還是按1個字節(jié)對齊.
如果寫: typedef char Array3[3];
Array3這種類型的對齊方式還是按1個字節(jié)對齊,而不是按它的長度.
不論類型是什么,對齊的邊界一定是1,2,4,8,16,32,64....中的一個.

【一道計算機筆試題】相關(guān)文章:

360筆試題目06-27

筆美國國家儀器試題目09-23

經(jīng)典勵志故事:一道測試題09-17

一道改變思維的面試題06-09

搜狐產(chǎn)品筆歸分享筆試題目07-05

UT計算機類筆試題07-05

計算機編程筆試題目08-09

計算機基礎(chǔ)技術(shù)筆試題10-16

悲慘的東方海外計算機類筆試題目09-18

單片機、MCU、計算機原理筆試題目07-13