数据对齐

计算机系统对基本数据类型合法地址做出了一些限制,要求某种类型对象的地址必须是某个值K(2, 4, 8)的倍数。

这种对齐限制简化了处理器和存储器系统之间的接口的硬件设计

处理器一次从内存中读取2或4或8个字节的数据,而如果地址并不是k的倍数则处理器可能需要执行两次访问操作

其实无论数据是否对齐都能正常工作,但是数据对齐可以提高存储器性能

扩展:有些多媒体操作指令要求存储器地址必须对齐,因此确保栈帧的长度都是16字节的整数倍

而以C语言结构体为例

每次为malloc为结构分配内存时要考虑返回的指针满足机器一切字节对齐限制

一般为4或者8,而这时编译器坑你需要在字段的分配中插入间隙,常见对小于4字节的字段插入间隙

结构本身对起始地址也有一写对齐要求

例1:

struct AA {
char c;
int a;
double b;
} CC;
例2:

struct AA {
int a;
double b;
char c;
} CC;

例1会有16字节空间

例2会有24字节空间



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值