我对c/c++自然对界的理解

struct da
{
	char a;
	int  i;

	
};
int main(int argc, char *argv[])
{
	da a;
	printf("%d\n",sizeof(a));
	system("pause");
	return 0;
}

代码如上,得到结果为8

这个大家都能理解成员都被分配了4个字节

struct da
{
 char a;
 char b;
 int  i;
 
};

但是如果结构体被换成如上情况呢?结果还是8,这是为什么呢?按照管理 每一个分配了4,则应该是12才对

其实是这样的对界的意思是前边或者后边的一部分而不是一个按照最大的内存字节来分配大小,

大家可以将结构体换成如下测试

struct da
{
 char a;
 char b;
 char c;
 char d;
 char e;s
 int  i;
};

结果是12

写程序过程中最好在结构体定义之前加入

#pragma  pack(1)

防止struct 中的char自然对界,不然指针偏移或者内存拷贝时候容易出错

原文地址:https://www.cnblogs.com/zwt1234/p/2195161.html