一、什么是内存对齐

(1)   原理

a)  编译器按照成员列表的顺序给每个成员分配内存.

b)  当成员需要满足正确的边界对齐时,成员之间用额外字节填充.

c)  结构体的首地址必须满足结构体中边界要求最为严格的数据类型所要求的地址.

d)  结构体的大小为其最宽基本类型的整数倍.

(2)   程序设计

 1 #include<iostream>
 2 
 3 #include<cstdio>
 4 
 5 #include<string>
 6 
 7 using namespace std;
 8 
 9 struct node1
10 
11 {
12 
13       char c;
14 
15       char b;
16 
17       int a;
18 
19 }n1;
20 
21 struct node2
22 
23 {
24 
25       char c;
26 
27       int a;
28 
29       char b;
30 
31 }n2;
32 
33 int main()
34 
35 {
36 
37       //内存大小
38 
39       int size1=sizeof(node1);
40 
41       int size2=sizeof(node2);
42 
43       printf("%d %d\n",size1,size2);
44 
45       //具体地址
46 
47       //node1
48 
49       cout<<(long long)(void*)&n1.c-(long long)(void*)&n1<<endl;
50 
51       cout<<(long long)(void*)&n1.b-(long long)(void*)&n1<<endl;
52 
53       cout<<(long long)(void*)&n1.a-(long long)(void*)&n1<<endl;
54 
55       //node2
56 
57       cout<<(long long)(void*)&n2.c-(long long)(void*)&n2<<endl;
58 
59       cout<<(long long)(void*)&n2.a-(long long)(void*)&n2<<endl;
60 
61       cout<<(long long)(void*)&n2.b-(long long)(void*)&n2<<endl;
62 
63       return 0;
64 
65 }
View Code

相关文章: