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

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;
}

猜你喜欢

转载自blog.csdn.net/v__king__/article/details/78905900