欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

结构体内存对齐

程序员文章站 2022-07-12 16:49:59
...

关于结构体的内存对齐文体,主要遵循下面几个原则,记住就好。

1.结构体的第一个成员永远都放在结构体的0偏移处。

2.从第二个成员开始,都要对其到某个对齐数的整数倍处。

(对齐数:结构体成员自身大小和默认对齐数的较小值;

  默认对齐数:VS编译器下:8,linux:4)

3.结构体的总大小必须是最大对齐数的整数倍。

注意:0偏移处大家可能有所疑问,其实就是系统默认从哪个位置开始分配内存的地方就是0偏移处,因为它并没有偏移嘛。

             偏移:就是往后挪。

请大家看下面的详解:

struct student
{
	char a;
	int b;
	double c;
	char d;
};

结构体内存对齐结构体内存对齐

                                                                                  结构体内存对齐        

验证结果:

结构体内存对齐

下面再来看几个具体的实际例子:

下面是我自己总结的简单计算方法(a+b)b表示自身大小,a表示偏移几个位置,0的话表示紧接着就分配空间了

struct student
{
	int a;//0+4
	char b;//0+1
	int c;//3+4
	double d;//4+8
};

4+1+3+4+4+8=24(刚好为最大对齐数8的倍数所以不用再继续分分配空间)

结果:24(如果对结果有疑问自己上机验证)

struct student
{
	double a;//0+8
	int b;//0+4
	char c;//0+1
	int d;//3+4
};

8+4+1+3+4=20

因为最大对齐数为8,而20不是8的倍数,所以自动分配空间到24,为8的倍数

结果:24(如果对结果有疑问自己上机验证)

如果有什么问题或者疑问可以私信我,或者直接留言评论,谢谢大家的宝贵意见!







相关标签: 结构体内存对齐