结构体成员内存对齐
#include<stdio.h> struct A { int A; }; int main() { struct A a; printf("%d\n",sizeof(a)); return 0; }
运行结果:4
#include<stdio.h> struct A { int a; int b; }; int main() { struct A a; printf("%d\n",sizeof(a)); return 0; }
运行结果:8
#include<stdio.h> struct A { int a; char b; }; int main() { struct A a; printf("%d\n",sizeof(a)); return 0; }
运行结果:8
分析:以结构体中最大的数据类型的字节为标准,随后的基础数据类型都会跟随它对齐
#include<stdio.h> struct A { char a; short b; int c; short d; char e; }; int main() { struct A a; printf("%d\n",sizeof(a)); return 0; }
运行结果:12
a |
|
b |
|
c |
|||
d |
e |
|
|
13 |
14 |
15 |
16 |
32位计算机(主流):
long 8
int 4
short 2
char 1
#include<stdio.h> struct A { char a; short b; char c; int d; long long e; }; int main() { struct A a; printf("%d\n",sizeof(a)); return 0; }
运行结果:24
a |
|
b |
c |
|
|
d |
||
e |