年前辭職了,準備年後找工作。
所以在網上查詢一下 c/c++ 基礎方面的面試題,個人感覺這方面還是要準備一下。
雖然後面的應聘沒有用到所準備的這些,算是學習一下。
在學習過程中,注意到一些關於結構體占用記憶體空間大小(sizeof 與 padding byte)的問題,覺得挺有趣的。
在 wince 以前的小系統(嵌入式系統)程式設計時,特別注意記憶體的使用情況;但到了 wince 系統後,由於裝置一般都有 128m(或更多)的記憶體,所以在記憶體的使用與優化上很多人已經不太注意。
嵌入式方面的程式設計師,還是有必要了解以下關於結構體占用空間這個問題。
1 typedef structtwobytes_s
2twobyteseml; 67
8 typedef struct
fourbytes_s
9fourbyteseml;
1516
17 typedef struct
eightbytes_s
18eightbyteseml;
2829
30//
結構體實際占用的空間大小與結構體中占用空間最大的成員有什麼關係?
31//
結論: 結構體的大小為結構體中占用位元組最大的成員的倍數。
3233
34//
對比 testoder, testorder3 和 testoder2 占用記憶體空間的情況
35 typedef struct
testorder_s
36testorder;
4344
45 typedef struct
testorder2_s
46testorder2;
5354
55 typedef struct
testorder3_s
56testorder3;
6263
64//
對比 testshort 和 testshorteml 占用記憶體空間的情況
65 typedef struct
testshort_s
66testshort;
70 typedef struct
testshorteml_s
71testshorteml;
7576
77//
對比 testint 和 testinteml 占用記憶體空間的情況
78 typedef struct
testint_s
79testint;
83 typedef struct
testinteml_s
84testinteml;
8889
90//
對比 testdouble 和 testdoubleeml 占用記憶體空間的情況
91 typedef struct
testdouble_s
92testdouble;
96 typedef struct
testdoubleeml_s
97testdoubleeml;
101102
103//
#define _use_windows_ce_platform
104void calcsizeofstruct(void
) 105
160161162
//第二部分 leo.zheng
163struct
tststruct
164;
169170
171struct
tststruct2
172;
178179
180struct
tststruct3
181;
185186
187struct
tststruct4
188;
192193
194struct
tststruct5
195;
202203
204struct
tststruct6
205 inner;
212};
213struct
tststruct6_r
214 inner;
220char
c;
221short
s;
222};
223224
225struct
tststruct7
226;
231232
233struct
tststruct8
234;
239240
241struct
tststruct9
242 inner;
248char
c;
249};
250251
252void calcsizeofstruct2(void
) 253
// 在 wince 上執行輸出如下:/* size of char is 1
size of short is 2
size of int is 4
size of long is 4
size of char * is 4
size of float is 4
size of double is 8
size of struct(char,char,int,char,char) is 12
size of struct(int,char,char,char,char) is 8
size of struct(int,char,char,char) is 8
size of struct(char,short) is 4
size of struct(char,twobyteseml(char,char)) is 3
size of struct(char,int) is 8
size of struct(char,fourbyteseml(char,char,char,char)) is 5
size of struct(char,double) is 16
size of struct(char,eightbyteseml(char,char,char,char,char,char,char,char)) is 9
size of (struct tststruct) = 12
size of (struct tststruct2) = 16
size of (struct tststruct3) = 8
size of (struct tststruct4) = 4
size of (struct tststruct5) = 8
size of (struct tststruct6) = 12
size of (struct tststruct6_r) = 12
size of (struct tststruct7) = 12
size of (struct tststruct8) = 8
size of (struct tststruct9) = 12
*/
// 在 x86 上執行的輸出如下:/* size of char is 1
size of short is 2
size of int is 4
size of long is 4
size of char * is 4
size of float is 4
size of double is 8
size of struct(char,char,int,char,char) is 12
size of struct(int,char,char,char,char) is 8
size of struct(int,char,char,char) is 8
size of struct(char,short) is 4
size of struct(char,twobyteseml(char,char)) is 3
size of struct(char,int) is 8
size of struct(char,fourbyteseml(char,char,char,char)) is 5
size of struct(char,double) is 16
size of struct(char,eightbyteseml(char,char,char,char,char,char,char,char)) is 9
size of (struct tststruct) = 12
size of (struct tststruct2) = 16
size of (struct tststruct3) = 8
size of (struct tststruct4) = 4
size of (struct tststruct5) = 8
size of (struct tststruct6) = 12
size of (struct tststruct6_r) = 12
size of (struct tststruct7) = 12
size of (struct tststruct8) = 8
size of (struct tststruct9) = 12
*/
結構體的空間占用
本文主要包括二個部分,第一部分重點介紹在vc中,怎麼樣採用sizeof來求結構的大小,以及容易出現的問題,並給出解決問題的方法,第二部分總結出vc中sizeof的主要用法。1 sizeof應用在結構上的情況 請看下面的結構 struct mystruct 對結構mystruct採用sizeof會出現...
結構體占用空間的大小 pragma pack
pragma pack 8 struct s1 struct s2 pragma pack sizeof s2 結果為24.成員對齊有乙個重要的條件,即每個成員分別對齊.即每個成員按自己的方式對齊.也就是說上面雖然指定了按8位元組對齊,但並不是所有的成員都是以8位元組對齊.其對齊的規則是,每個成員按...
結構體共用體占用空間區別 記憶體對齊
題目來自牛客網 在32位機器上 設有以下說明和定義 typedef union date struct data too date max 則語句 printf d sizeof struct data sizeof max 的執行結果是 52union 維護足夠的空間來置放多個資料成員中的 一種 ...