【C++学习笔记(一)】之结构体的内存对齐

      关注公号【开发小鸽】,获取海量计算机视觉与深度学习资源,实战项目源码,最新论文下载,大厂面试经验!!!​

一. 结构体的内存对齐:

        结构体可以存储不同类型的数据,每种数据所占的字节数都不同。而结构体是按照最大字节数来存储的,若结构体中最大的数据类型占8个字节,则结构体存储的内存中按8个字节为一格存储,将其他较少字节数的数据往里填,若有空余,则看下一个数据能否填入;若不能,则按照内存对齐原则,从下一格重新开始填入数据,空余的内存则被跳过。

二. 设置结构体如下:

struct stus{
    char *p;            //4
    char arr[2];        //1*2
    int c;              //4
    short d;            //2
    double f;           //8
    long g;             //4
    float h[2];         //4*2
};

        若不调整结构体中数据存储顺序,则按最大数据类型8个字节为一格,依次填入,如下图

在这里插入图片描述

        红色圈为空余的内存
        计算得到结构体整体内存占40个字节

若将结构体中数据类型从大到小排列:

struct stus{
    double f;           //8
    float h[2];         //4*2
    long g;             //4
    int c;              //4
    char *p;            //4
    short d;            //2
    char arr[2];        //1*2
};

        调整后结构体整体内存占32个字节

结论:

        内存空余的情况得到了优化。但是打乱结构体的排列顺序也可能导致阅读结构体的思维混乱,所以需要平衡这两者。

        关注公号【开发小鸽】,获取海量计算机视觉与深度学习资源,实战项目源码,最新论文下载,大厂面试经验!!!​

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容