内存对齐
程序员文章站
2022-06-03 22:53:36
...
在结构体中,首次接触到了内存对齐
typedef struct inf{
char name;
int age;
char sex;
}inf;
int main()
{
inf zhang;
printf("sizefof = %d\n",sizeof(zhang));
return 0;
}
结果:
[[email protected] memory]$ ./mem_alg
sizefof = 12
为什么要内存对齐?
计算机的内存是以字节(Byte)为单位划分的,理论上cpu可以访问任意编号的字节,但实际上不是如此。
以32位cpu为例,一次可以处理32位的数据,因此命令地址总线每次读取4字节的数据(32位)。这样能最有效的处理数据,因此cpu寻址以4字节为一个步长,这样可以最快的速度寻址并处理数据,同时又不会造成遗漏。
对与程序来说一个变量最好位于一个寻址步长之内。若果不是那么需要分次读取再拼接数据,这样效率变低。
**将一个数据尽量放在一个步长之内,避免跨步长存储,这称为内存对齐。**这是一种牺牲空间换时间的做法。
最后,内存对齐的大小可以自己设定。
推荐阅读