1、字节对齐
目的:牺牲一点空间,换时间的效率(CPU执行效率)
最终结构体大小一定是4的倍数(32bit系统)
结构体里成员变量顺序不一致,也会影响结构体的大小
数据类型 | 32位机大小(字节) | 64位机大小(字节) |
---|---|---|
char | 1 | 1 |
short | 2 | 2 |
int | 4 | 4 |
long | 4 | 8 |
指针类型 | 4 | 8 |
double | 8 | 8 |
float | 4 | 4 |
unsigned int | 4 | 4 |
long long | 8 | 8 |
#include<stdio.h>
struct abc{
char a;
int b;
};
int main(){
struct abc s;
printf("The size of struct abc is %lu\n",sizeof(s));
return 0;
}
运行结果:
ubuntu@ubuntu-virtual-machine:~$ gcc struct.c -o struct
ubuntu@ubuntu-virtual-machine:~$ ./struct
The size of struct abc is 8
在此程序中CPU读结构体变量时,第一次需要读取一个字节,第二次需要读取四个字节。而32bitCPU每次最大可读取4byte,用sizeof读取结构体大小,一定是4的倍数。
#include<stdio.h>
struct abc{
char a;
short b;
int c;
};
struct aeo{
char a;
int b;
short c;
};
int main(){
struct abc s;
struct aeo d;
printf("The size of struct abc is %lu\n,aeo is %lu\n",sizeof(s),sizeof(d));
return 0;
}
执行结果:
ubuntu@ubuntu-virtual-machine:~$ ./struct
The size of struct abc is 8
,aeo is 12
在结构体abc中a占一个字节剩余三个字节,b占两个字节,在三个字节里面够放,所以a、b一起占四个字节
嵌入式C语言面试必备(结构体字节对齐的方法和大小确定)