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。

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

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

    关注

    9

    文章

    3173

    浏览量

    76125
  • 结构体
    +关注

    关注

    1

    文章

    131

    浏览量

    11300

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    成型电感的制作工序简述

    在5G通信、新能源汽车、人工智能等前沿科技领域,电子元件的微型化与高性能化已成为行业发展的核心驱动力。作为功率电感领域的革新者,一成型电感凭借其紧凑结构、高效滤波与抗干扰能力,正成为高端电子设备
    发表于 12-11 14:09

    结构声明与定义

    1、声明 结构的声明使用struct关键字,如果我们想要把我们的学籍信息组织一下的话,可以这样表示: struct Info { unsigned long identifier;//学号
    发表于 12-11 07:52

    typedef结构使用

    虽然结构的出现能够让我们有一个更科学的数据结构来管理数据,但是每次使用结构都需要struct...,未免显得有些冗长和麻烦。有了type
    发表于 12-08 07:04

    共用声明

    共用也称联合体。 和结构还是有点像: union 共用名称 { 成员1; 成员2
    发表于 12-05 07:24

    为什么不建议用匿名结构

    说起匿名结构,想必大家第一感觉就是看着好高大上的名字,但实际上也就那样。 typedef struct { union { struct { uint8_t bit_0:1
    发表于 12-04 07:39

    C语言的编程技巧

    一个成员是一个未知大小的数组,适用于动态分配内存并关联一个可变长度的数组。‌ ‌3、匿名结构和联合体‌:C语言允许在结构
    发表于 11-27 06:46

    控制结构介绍

    1. 顺序结构:按照代码的书写顺序,逐行执行程序。这是最基本的程序结构。 2. 选择结构:根据条件判断的结果,选择执行不同的代码块。常见的
    发表于 11-24 06:43

    C语言结构使用

    型的数据组合。 结构的声明与定义 结构的声明一般形式为: c struct 结构名{
    发表于 11-12 08:30

    can_sample例程,rxmsg.hdr = -1;语句报错如何解决?

    使用官方CAN_sample例程编译,cubemx已经配置好CAN引脚,menuconfig也已经打开相关接口,但编译时报错,显示结构 rt_can_msg结构中没有hdr这个
    发表于 09-24 07:05

    定义IO初始化结构

    由上述IOPORT相关功能的枚举类型我们可以知道,在对IOPORT模块进行初始化时需要根据情况配置它们。因此我们定义一个IOPORT初始化的结构类型IOPORT_Init_t,它的成员包括了由上述所有枚举类型所声明的变量,因此
    的头像 发表于 07-16 16:26 1134次阅读

    渗压计在混凝土结构中的安装指南

    在现代土木工程和岩土工程中,渗压计是监测混凝土结构体内孔隙水压力变化的重要工具。南京峟思公司生产的渗压计因其高精度和可靠性而被广泛应用于各种工程监测项目中。一、渗压计在混凝土结构中的应用价值渗压计
    的头像 发表于 05-28 10:55 392次阅读
    渗压计在混凝土<b class='flag-5'>结构</b><b class='flag-5'>体</b>中的安装指南

    GLAD应用:全息光栅模拟

    用于模拟全息记录介质中形成的梯度折射率分布。全息结构一旦形成,就可以在传输过程中将一束入射光波逐渐转换成形成体全息结构的另一束光波。两束光波之间的能量传递转换效率与全息
    发表于 05-15 09:32

    程序设计与数据结构

    《程序设计与数据结构》重点阐述了三大方向内容: 1. C语言学习中的痛点:针对当前工程师在C语言学习中的痛点,如指针函数与函数指针,如何灵活应用结构等。从变量的三要素(变量的类型,变量的值和变量
    发表于 05-13 16:45

    C语言中结构与联合体的深度解析:内存布局与应用场景

    一、基础概念与核心差异 1.1 结构(Struct)的本质 **结构是C语言中实现数据封装的基石,其核心特征在于内存独立性。每个成员变量
    发表于 04-08 09:18

    全套C语言培训资料—PPT课件

    全套C语言培训资料,共427页,13个章节:C语言概述、程序的灵魂—算法、数据类型 & 运算符与表达式、顺序程序设计、选择结构程序设计、循环控制、数组、函数、预处理命令、指针、结构
    发表于 03-12 14:50