内存对齐

	内存对齐原则:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

对齐规则:
对齐数值:min(默认的对齐方式,max(所有成员的类型大小))

#include <stdio.h>
#include <string.h>

typedef struct _STU
{		//所有成员类型中最大为4字节,默认的对齐系数为8字节,取二者中最小的,4
	int id;					//4
	char name[20];			//24
	char sex;				//25不能被4整除,补至28
	int age;				//32
	float score;			//36
	char addr[30];			//66不能被4整除补至68
}STU;
int main()
{
	int i = sizeof(STU);
	printf("%d\n", i);
	return 0;
}

在这里插入图片描述
若有下面的说明和定义:

struct test
{ 
	int ml;
	char m2;
    float m3;
	union uu
	{
		char ul[5]; 
		int u2[2];
	} ua;
} myaa;

则sizeof(struct test )的值是( )。

对于结构体来说,成员有四个,对于共用体来说,其所占的内存长度等于最长的成员的长度,即 int u2[2];的长度,为8字节。
所以,对于结构体来说,其对齐数值取4,结构体的内存大小为:m1占据4个字节,m2占据一个字节,之和为5不能整除4,补至8,m3占据4个字节,共用体占据8个字节,所以结构体所占内存大小为20个字节。

union uti 
{
 	int n;
 	double g;
	char ch[9];
}
 struct srt
 {
 	float xy;union uti uv;
}aa;

union里面以最大成员计算空间,应该是char[9],占9字节,然后以8字节为单位对齐,所以uti实际占16字节。 struct srt中,就是4+16=20字节,同样以8字节对齐,所以应该是24。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值