0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

结构体成员的顺序会影响结构体的大小吗

学益得智能硬件 来源:学益得智能硬件 2024-11-25 16:24 次阅读

相同的结构体成员,如果把顺序调整一下,会不会影响结构体的大小?

答案是会的,这主要跟字节对齐有关。

比如这样的结构体,前面两个是 char 类型,后面跟上一个 int 类型。

struct A
{
    char a;
charb;
intc;
};

它在内存中的排序是这样的,第一个 char 占 1 个字节,紧接着第 2 个 char 也占 1 个字节。

因为最后是个 int 类型,所以中间还要空 2 个字节。要保证 int 的偏移是 4 的整数倍。

结构体最终长度就是 8 个字节。

下面调整一下,把第 2 个 char 放到 int 的后面。

struct B
{
    char a;
    int b;
    char c;
};

第一个 char 任然占 1 个字节,由于后面是 int,中间还得空 3 个字节。

最后的 char 占 1 个字节。

由于 int 的存在,结构体的总长度必须是 4 的整数倍,所以结果就是 12。

成员的顺序一旦变了,他们在内存中的排布方式就会不一样,结果也就不同。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    3002

    浏览量

    73887
  • 结构体
    +关注

    关注

    1

    文章

    130

    浏览量

    10833

原文标题:结构体成员的顺序会不会影响结构体的大小

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言和C++中结构的区别

    同样是结构,看看在C语言和C++中有什么区别?
    的头像 发表于 10-30 15:11 142次阅读

    ota升级的库中,结构upgrade_server_info中pespconn的作用是什么?

    check_cb; struct espconn *pespconn; }; 这个结构中已经有ip,port,pespconn这个结构
    发表于 07-12 06:33

    神经元的结构及功能是什么

    的细胞,具有独特的形态结构。神经元的基本结构包括细胞、树突和轴突。 (1)细胞:细胞是神经元的中心部分,包含细胞核和其他细胞器。细胞核
    的头像 发表于 07-03 11:33 1024次阅读

    请问esp-idf&vscode结构索引不到对应的成员如何解决?

    兄弟们,我用VSCode 初始化结构时,索引不到对应的成员,并且索引会出现不属于结构体内的东西,有解决办法吗,球球了
    发表于 06-14 06:42

    你是否真的了解结构占用了多少字节?

    结构成员所占内存空间大小一般情况下,如果想知道结构成员
    的头像 发表于 06-04 08:04 381次阅读
    你是否真的了解<b class='flag-5'>结构</b><b class='flag-5'>体</b>占用了多少字节?

    嵌入式中C语言结构基本实现

    :     在struct 中声明了一个含有若干新成员的数据类型。     tag  是结构标签。     member-list  是标准的变量定义,比如 int i; 或者 float f,或者其他
    的头像 发表于 05-11 08:49 943次阅读
    嵌入式中C语言<b class='flag-5'>结构</b><b class='flag-5'>体</b>基本实现

    定义了一个结构,但是分配的地址不连续,为什么?

    定义了一个结构,但是分配的地址不连续,是KEIL的问题还是我的问题?
    发表于 04-26 08:12

    用FreeRTOS使用队列怎么发送一个结构呢?

    怎么使用队列,发送一个12个字节的结构呢? osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec
    发表于 04-17 07:35

    C语言结构史上最详细的讲解【软件干货】

    struct结构数据类型 前言 我们知道,在C语言中有一些基本的数据类型,如 char int float long double string(c99) 等等数据类型,他们可以表示一些事物
    的头像 发表于 03-28 17:52 694次阅读

    求助,请问一个结构如何全部定义到 __attribute__ 区域?

    请问一个结构如何全部定义到 __attribute__ 区域? 例如我这里涉及到一些高速计算的缓存,计划将缓存数据存储到 __attribute__ 区域。 三个结构 ,每个
    发表于 01-16 07:29

    经典 C 语言编程,结构和联合体如何共用?

    结构 结构占用的内存大小,首先和编译器的系统位数有关系,类似于CPU是 64 bits 还是 32 bits 的情形;其次,
    的头像 发表于 01-11 18:24 1266次阅读
    经典 C 语言编程,<b class='flag-5'>结构</b><b class='flag-5'>体</b>和联合体如何共用?

    结构与指针的关系

    在C语言中,结构(Struct)是一种用户自定义的数据类型,它允许您将不同类型的数据项组合在一起,以便形成一个更复杂的数据结构结构可以
    的头像 发表于 01-11 08:00 944次阅读
    <b class='flag-5'>结构</b><b class='flag-5'>体</b>与指针的关系

    keil arm工程中结构1字节对齐如何实现

    在Keil Arm工程中,结构的对齐方式可以通过使用特定的编译器指令或者关键字来实现。结构的对齐方式直接影响
    的头像 发表于 01-05 14:40 3512次阅读

    golang结构如何定义?如何使用呢?

    结构是go语言最重要的数据结构之一,go和其它编程语言不一样,它没有类的概念,类比过来struct就相当于其它语言中的类,因此十分重要。
    的头像 发表于 11-28 10:36 420次阅读

    golang结构实例代码

    结构是go语言最重要的数据结构之一,go和其它编程语言不一样,它没有类的概念,类比过来struct就相当于其它语言中的类,因此十分重要。
    的头像 发表于 11-28 10:35 430次阅读