问题:内存对齐、sizeof计算的字节数不对

本文通过一个C语言示例介绍了内存对齐的概念及其在结构体中的应用。通过对比不同结构体的大小,展示了如何通过编译指令来控制内存对齐,进而优化程序的空间效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 脑补内存对齐:

百度https://baike.baidu.com/item/%E5%86%85%E5%AD%98%E5%AF%B9%E9%BD%90/9537460?fr=aladdin

2. 实验一下:

编译如下的c文件:使用命令gcc main.c

#include <sys/types.h>

#pragma pack(1)
typedef struct _CmdRfidReset {
    //unsigned char a;
    unsigned short int b;
    unsigned char c;
    unsigned char d;
    unsigned char e;
    unsigned char f;
    unsigned char g;
    unsigned char reserved[8];
    unsigned short int crc;
} CmdRfidReset;
typedef CmdRfidReset tSCmdRfidReset;


int main(){

    struct _CmdRfidResetUpload{
        unsigned char a;             //this is different to tSCmdRfidReset
        unsigned short int b;
        unsigned char c;
        unsigned char d;
        //unsigned char e;   //this is different to tSCmdRfidReset
        unsigned char f;
        unsigned char g;
        unsigned char reserved[8];
        unsigned short int crc;
    } CmdRfidResetUpload;



    printf("sizeof CmdRfidResetUpload = %d\n", sizeof(CmdRfidResetUpload));

    printf("sizeof RfidReset= %d\n", sizeof(tSCmdRfidReset));

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值