C/C++ 字节对齐问题

本文深入探讨了C/C++中的字节对齐问题,介绍了为何进行字节对齐以提高CPU存储速度,阐述了struct和union的对齐规则,并通过实例分析了字节对齐的具体实现。同时,提到了VC的#pragma pack(n)指令用于自定义字节对齐方式,最后通过两个实例题目展示了字节对齐在实际问题中的应用。
摘要由CSDN通过智能技术生成

字节对齐的原因

    为了提高 CPU 的存储速度,编译器会对 struct 和 union的存储进行优化,即进行字节对齐。

对齐方式

    对于 struct 或 union 中的 struct 或者 union 来说,它们的字节对齐标准就是它的所有成员中字节数最大的数据的字节数。

一般情况下 C/C++ 的变量所占用的字节数

        char:    1字节;

        short:   2字节;

        int:       4字节;

        long:    4字节;

        long long: 8字节;

        float:    4字节;

        double: 8字节;

        bool:    1字节;

*struct 中字节对齐需要满足的条件:

    1、某个变量存放的起始位置相对于结构的起始位置的偏移量是该变量字节数的整数倍;

    2、结构所占用的总字节数是结构种字节数最长的变量的字节数的整数倍。

    例:

struct Struct
{
    double d1;
    char d2;
    int d3;
}a;

sizeof(a) = 8 + 1 + 3 + 4 = 16。其中补上的 3 个字节是为了让 int 型数据的起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值