WinCE 下結構體占用空間的分析

2022-08-30 17:18:14 字數 4927 閱讀 1422

年前辭職了,準備年後找工作。

所以在網上查詢一下 c/c++ 基礎方面的面試題,個人感覺這方面還是要準備一下。

雖然後面的應聘沒有用到所準備的這些,算是學習一下。

在學習過程中,注意到一些關於結構體占用記憶體空間大小(sizeof 與 padding byte)的問題,覺得挺有趣的。

在 wince 以前的小系統(嵌入式系統)程式設計時,特別注意記憶體的使用情況;但到了 wince 系統後,由於裝置一般都有 128m(或更多)的記憶體,所以在記憶體的使用與優化上很多人已經不太注意。

嵌入式方面的程式設計師,還是有必要了解以下關於結構體占用空間這個問題。

1 typedef struct

twobytes_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 維護足夠的空間來置放多個資料成員中的 一種 ...