2016 - 2024

感恩一路有你

为什么要内存对齐 内存对齐的目的和规则?

浏览量:1864 时间:2021-03-14 12:09:12 作者:admin

内存对齐的目的和规则?

有四种内存对齐原则:

1)。数据成员对齐规则:结构(或联合)的数据成员。第一个数据成员放置在偏移量为0的位置。之后,每个数据成员存储的起始位置从该成员大小或其子成员大小的整数倍开始(只要该成员有子成员,如数组、结构等)(例如,在32位计算机中int为4字节,则应从4的整数倍地址开始存储)。基本类型不包括struct/class/Uinon。

2) . struct as member:如果一个结构中有一些结构成员,那么应该从结构中“最宽的基本类型成员”的整数倍地址存储结构成员。(结构a包含结构B,而B包含char、int、double和其他元素,那么B应该从8的整数倍存储。)。

3) . 收尾工作:结构的总尺寸,即sizeof的结果,必须是结构内部最大构件的“最宽基本型构件”的整数倍。弥补不足。(基本类型不包括struct/class/Uinon)。

4) . sizeof(Union),结构中最大的元素是Union的大小,因为在特定时间,只有Union的一个成员实际存储在地址中。

内存对齐的规则?

为了加快计算机的访问速度,编译器在默认情况下对内存进行字节对齐。结构(包括类)字节对齐的原则如下:

1)结构变量的第一个地址可以除以其最宽的基本类型成员的大小;

2)结构的每个成员相对于结构的第一个地址的偏移量是成员大小的整数倍。如果需要,编译器将在成员之间添加内部加法;

3)结构的总大小是结构最宽基本类型成员大小的整数倍。如果需要,编译器将在最后一个成员之后添加尾随填充。Structsbyte1{double//offset 0~7charj//offset 8inta//offset 12~15,因为9不能被4除,请先填写9~11}sizeof(sbyte1)//=16structsbyte2{charj//offset 0double//offset 8~15,因为1不能被8除,请先填写1~7inta//offset 16~19}sizeof(sbyte2)//=24,为了做一个8的倍数,填20~23

大家好,我是兰帮子,个人网站的小站长,毕业于机械专业,转向互联网,喜欢抛掷技术。

虽然我没有写太多的代码,但我以前读过一段,想和大家分享,哈哈

!一个程序员接错了代码,程序员看了代码很头疼,因为没有注释行,然后偷偷地骂:这个程序是谁写的?没有笔记。我必须把结构分成不同的层次。越想越委屈。但看着它,他觉得代码越来越熟悉了。是的,这个节目是他写的。哈哈

!因此,必要的注释对于代码是非常必要的。如果你想到那个程序员,你甚至认不出你写的程序。另一个程序员接手不是更有效吗?

虽然我写的代码不多,但我偶尔会修改站点构建系统上的一些模板文件。带注释的代码组织得非常好。看起来不仅赏心悦目,而且更容易找到错误的代码。我认为对于编写程序的人来说,要高效地编写代码,必要的注释是必不可少的!

为什么要内存对齐 结构体对齐原则 结构体内存对齐规则

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。