关于“内存对齐”最通俗易懂的解释

1.作用:内存对齐的主要作用包括提高性能、优化内存访问、增强代码可读性和维护性,以及提高系统的稳定性和可靠性。

2.内存对齐的定义一个变量的内存首地址位于该变量长度的整数倍上,则被成为内存对齐。

3.定义的规则:

(1)有效对齐值:给定的对齐系数与结构体(以结构体为例)中最长数据类型长度相比较小的那一个

(2)在(1)的基础上,结构体中每个成员相对于结构体首地址的偏移量应为成员数据长度与有效对齐值相比较较小的那个的整数倍

(3)结构体的总大小应为有效对齐值的整数倍。

举例说明:

给定系数为8byte(#pragma pack(8)),结构体s1中最长数据类型为int,长度为4byte,4<8,所以有效对齐值为4。设s1的首地址为0,内存依次增加。a的长度为1byte,所以a的地址偏移量为1的整数倍,则放在地址0处即可。同理int是4byte,4=4,b的地址偏移量为4的整数倍,则存放在地址4处。s是2byte,则存放在地址8处。此时,4+4+2=10,不符合规则(3),所以要多开辟2个byte的内存,故该结构体的总大小为12byte。

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

#pragma pack(8)
int main(){

    struct s1{
    char a;
    int b;
    short s;
    }s1;

    printf("%d\n",sizeof(s1));
}
		

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值