采用内存对齐的方式存储数据的意义

一. 意义

1. 优势

不是所有的硬件平台都能够访问任意的地址,CPU是按照块来访问内存的(可能是2、4、8、16字节块),如果不进行内存对齐来储存数据,那么数据是一个字节挨着一个字节来存的,这样的话会增加的CPU访问负担,例如:

假设现在CPU是按照每4个字节来访问内存,有地址0、和地址1,现在要存1个char变量(假设char变量占1字节)和1个int变量(假设int变量占4字节),那么可以有内存对齐和内存不对齐的存储方式,如下图:
在这里插入图片描述
假如不采用内存对齐的方式存储数据,那么CPU需要访问地址0和地址1,再进行合并,才能得到最终的结果;
采用内存对齐的方式进行存储数据的话,则只需访问地址1就可以得到最终的结果。
因此,采用内存对齐的存储方式可以减少CPU的访问运行时间

2. 缺点

可以明显知道内存对齐方式存储数据没有充分利用存储空间,但是对于工程实践来说,我们更愿意用这样的“空间换时间”的方式,这样可以大大较少我们的访问实践。

二. 对齐规则

数据是根据初始化的顺序存储的,先定义的先储存,存储地址需要是sizeof(数据变量)的整数倍。

例如,假设sizeof(char) = 1,sizeof(int) = 4,sizeof(int) = 4,sizeof(double) = 8。结构的对齐规则是要先确定对齐字节数(对齐字节数=结构体中的变量占用空间最大的那个字节数,下面的结构体t3、t4就是sizeof(double) = 8),然后再保证存储地址是sizeof(数据变量)的整数倍。

#include <iostream>
using namespace std;

struct t1{
    char a;
    short c;
    int x;
    char b;

};

struct t2{
    int x;
    char b;
    char c;
    short a;
};

struct t3{
    short a;
    double c;
    int x;
    char b;

};

struct t4{
    char a, b;
    int x;
    double c;

};
int main()
{
    
    cout << sizeof(t1) << endl; //12
    cout << sizeof(t2) << endl; //8
    cout << sizeof(t3) << endl; //24
    cout << sizeof(t4) << endl; //16
    return 0;
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值