Mike 发表于 2021-7-20 22:06:30

结构体字节对齐

struct STUDENT
{
char a;
int b;
}data;
如上结构体变量data占多少字节?char占1个字节,int占4个字节,所以总共占 5 个字节。
#include<stdio.h>
struct STUDENT
{
char a;
int b;
}data;
int main(void)
{
printf("%p, %p \n", &data.a, &data.b);
printf("%d\n", sizeof(data));
return 0;
}

我们看到data不是占5个字节,而是8个字节。变量a的地址是从0x5579dc10f018到0x5579dc10f01b,占4个字节,变量b的地址从0x5579dc10f01c 到0x5579dc10f01f,占4个自己,但是 a 的类型是 char 类型,不是占 1 个字节?是的还是占1个字节,只不过是结构体中有一个字节对齐的概念。

什么叫做字节对齐呢?
我们知道结构体是一种构造数据类型,里面可以有不同数据类型的成员。在这些成员中,不同的数据类型所占用的内存空间是不同的。那么系统是怎么给结构体变量的成员分配内存的呢?
就是按照字节对齐的方式存储的,即以结构体成员中占用内存最多的数据类型所占用的字节数为标准,所有的成员在分配内存时都要与这个长度对齐。我们举个例子。
我们以上面那个例子,结构体变量data的成员中占内存最多的数据类型是 int 型,



文档来源:51CTO技术博客https://blog.51cto.com/u_13721123/3143833
页: [1]
查看完整版本: 结构体字节对齐