#美团面试题#什么是内存对齐#为什么要内存对齐#

内存对齐是指在计算机系统中,数据结构的成员在内存中按照特定规则排列,以提高访问效率和兼容性。本文通过一个简单的C语言代码示例,解释了内存对齐的规则:结构体成员的偏移量必须是其类型的字节数的整数倍,结构体大小也是最大成员字节数的整数倍。内存对齐的原因包括平台兼容性和性能提升,避免多次内存访问。
摘要由CSDN通过智能技术生成

什么是内存对齐?

为了方便解释这个问题,我们先来看下面这个代码示例:

#include <stdio.h>
//定义结构体A
struct A
{
	short a;
	char b;
	int c;
};
//定义结构体B
struct B
{ 
	short a;
	int b;
	char c;
};
//输出每个结构体所占的内存字节大小
	printf("%d\n",sizeof(A));
	printf("%d\n",sizeof(B));
	return 0;

运行结果为:
8
12

分别对他们求大小,sizeof(A),sizeof(B)我们所得到的结果是不同的,
sizeof(A)=12而sizeof(B)=8为什么会产生不一样的结果呢?
这是非常简单的一个例子,体现了结构体的内存对齐规则。
在结构体中,从结构体的首地址开始,假设地址从0开始。
对结构体A来说,a占1个字节,占从01的字节,b是char类型占1个字节,占从45的字节,c占4个字节,从4~7的字节。
对结构体B来说,a占1字节,从01,b占4个字节从48;c占1个字节从8~9。
这就是内存对齐,对齐规则是按照成员的声明顺序,依次安排内存,其偏移量为成员大小的整数倍,0看做任何成员的整数倍,最后结构体的大小为最大成员的整数倍(所以这里的A的大小是8,而不是 6)。
————————————————

为什么要内存对齐?

1.平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;
某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异
常。
2.性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。
原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问
仅需要一次访问。
————————————————

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值