美文网首页
【嵌入式C】结构体中需要注意的地方(字节对齐问题)

【嵌入式C】结构体中需要注意的地方(字节对齐问题)

作者: Blue_Well | 来源:发表于2020-03-25 22:37 被阅读0次

在结构体中,哪个数据类型最大,就以哪个数据类型对齐,比如,最大的数据类型为uint32_t,那么结构体就以4字节对齐,没有对齐的数据按4字节来算。

//测试代码:

#include <stdio.h>

typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;

struct SIMPLE
{
    uint8_t a;
    uint8_t b;
    uint8_t c;
    uint8_t d;
    uint8_t e;
    uint32_t f;
}data;

int main(int argc, char const *argv[])
{
 /* code */
 printf("sizeof(struct) = %d\n", sizeof(data));
 return 0;
}

运行结果:

运行效果

分析:
这里最大的数据类型占了4个字节,因此结构体为4字节对齐,数据a,b,c,d算起来已经有4个字节了,但是数据e只有1个字节,为了字节对齐,因此数据e也会变成4个字节。

内存分布:
结合下面的内存分布图会更加清晰。

内存分布

相关文章

网友评论

      本文标题:【嵌入式C】结构体中需要注意的地方(字节对齐问题)

      本文链接:https://www.haomeiwen.com/subject/ngefuhtx.html