基础 - 结构体大小计算
生活随笔
收集整理的這篇文章主要介紹了
基础 - 结构体大小计算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 // 結構體大小.cpp : 定義控制臺應用程序的入口點。
2 //
3
4 #include "stdafx.h"
5 #include <windows.h>
6 #include <iostream>
7
8 using namespace std;
9
10
11 /*
12 結構體計算要遵循字節對齊原則
13
14 結構體默認的字節對齊一般滿足三個準則:
15
16 1) 結構體變量的首地址能夠被其最寬基本類型成員的大小所整除;
17
18 2) 結構體每個成員相對于結構體首地址的偏移量(offset)都是成員大小的整數倍,如有需要編譯器會在成員之間加上填充字節(internal adding);
19
20 3) 結構體的總大小為結構體最寬基本類型成員大小的整數倍,如有需要編譯器會在最末一個成員之后加上填充字節(trailing padding)
21
22 */
23
24
25 typedef struct _S1_
26 {
27 char a;
28 short b;
29 char c;
30 }S1;
31 /*
32 S1中,最大是short,2字節
33 char->short->char
34 char是一個字節,要對齊,附近又沒有另外的char和他湊
35 所以
36 2
37 2
38 2
39
40
41 第一個char占一個字節 多的這一個補0,只是占位作用
42 short 剛好占2個字節
43 第二個char也占1個 多的這一個補0,只是占位作用
44
45
46 一共6字節
47
48 */
49
50
51
52 typedef struct _S2_
53 {
54 char a;
55 char b;
56 short c;
57 }S2;
58 /*
59 S1=2中,最大是short,2字節
60 char->char->short
61
62 char是一個字節,要對齊,
63 第一個char和第二個char正好湊成兩個字節
64
65 第一個char占一個字節 第二個char也占1個
66 short 剛好占2個字節
67
68
69 所以
70 1 1
71 2
72
73 即
74 2
75 2
76
77 一共4字節
78
79 */
80
81
82
83
84 //同理S1、S2
85 typedef struct _S3_
86 {
87 int i;
88 char c;
89 int j;
90 }S3;
91
92
93
94 //同理S1、S2
95 typedef struct _S4_
96 {
97 int i;
98 int j;
99 char c;
100 }S4;
101
102
103
104
105 typedef struct _A_
106 {
107 char a1;
108 short int a2;
109 int a3;
110 double d;
111
112 }A;
113
114
115
116 typedef struct _B_
117 {
118 long int b2;
119 short int b1;
120 A a;
121
122 }B;
123 /*
124 當結構體成員變量是另外一個結構體時,只要把結構體中成員為另一結構體作為整體相加就行
125
126 對于B,先去掉A a
127 體B 算得 其為8,
128 所以最后結果為8+16=24;
129
130 */
131
132
133
134
135 int main()
136 {
137 cout << sizeof(S1) << endl;
138 cout << sizeof(S2) << endl;
139 cout << sizeof(S3) << endl;
140 cout << sizeof(S4) << endl;
141 cout << sizeof(A) << endl;
142 cout << sizeof(B) << endl;
143
144 return 0;
145 }
?
轉載于:https://www.cnblogs.com/1228073191Blog/p/7448694.html
總結
以上是生活随笔為你收集整理的基础 - 结构体大小计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU 4135 Co-prime 容斥
- 下一篇: Winform 窗体淡出淡入效果