相同的结构体成员,如果把顺序调整一下,会不会影响结构体的大小?
答案是会的,这主要跟字节对齐有关。
比如这样的结构体,前面两个是 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文章
3252浏览量
76569 -
结构体
+关注
关注
1文章
131浏览量
11422
原文标题:结构体成员的顺序会不会影响结构体的大小
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
关于C语言对齐的一些总结
1. 对齐的目的是什么? 提供访问效率---放大对齐 压缩存储空间---紧凑对齐 2. 对齐的类型有哪些? 自然对齐 :结构体默认按 最大基础类型成员 的大小对齐(比如最大
GLAD应用:体全息光栅模拟
。从而用于模拟全息记录介质中形成的梯度折射率分布。体全息结构一旦形成,就可以在传输过程中将一束入射光波逐渐转换成形成体全息结构的另一束光波。两束光波之间的能量传递转换效率与体全息
发表于 04-24 08:25
认识一下广州爱智德工控一体机的整机结构
爱智德工控一体机的结构与选型秘诀:从坚固耐用的金属外壳到灵敏的触摸屏,再到高性能主板和稳定电源,了解这些关键部件如何适应不同工业场景,助您做出精准选择。
小艺开放平台鸿蒙智能体开发智能体配置-基础信息
。
图标:上传的图标建议比例1:1正方形图片,大小不超过5M,支持png、jpeg、jpg不透明背景。
智能体名称:支持编辑智能体名称,智能体名称为必填项,不能编辑为空。
智能
发表于 02-02 16:47
10个例子代码,C语言结构体的高级
(\"Flag 3: %dn\", f.flag3);
return 0;
}
在这个例子中,我们使用了位字段来定义一个结构体,其中每个成员变量都指定了所占用的位数。这样
发表于 01-05 06:32
结构体声明与定义
1、声明
结构体的声明使用struct关键字,如果我们想要把我们的学籍信息组织一下的话,可以这样表示:
struct Info
{
unsigned long identifier;//学号
发表于 12-11 07:52
为什么不建议用匿名结构体
说起匿名结构体,想必大家第一感觉就是看着好高大上的名字,但实际上也就那样。
typedef struct {
union {
struct {
uint8_t bit_0:1
发表于 12-04 07:39
定义IO初始化结构体
由上述IOPORT相关功能的枚举类型我们可以知道,在对IOPORT模块进行初始化时需要根据情况配置它们。因此我们定义一个IOPORT初始化的结构体类型IOPORT_Init_t,它的成员包括了由上述所有枚举类型所声明的变量,因此
渗压计在混凝土结构体中的安装指南
在现代土木工程和岩土工程中,渗压计是监测混凝土结构体内孔隙水压力变化的重要工具。南京峟思公司生产的渗压计因其高精度和可靠性而被广泛应用于各种工程监测项目中。一、渗压计在混凝土结构体中的应用价值渗压计
结构体成员的顺序会影响结构体的大小吗
评论