一、什么是内存对齐
(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 }