VC++中结构体的存储

本文探讨了VC++中结构体的存储对齐问题。结构体的大小受到成员变量对齐方式的影响,导致不同顺序的成员会导致不同的结构体大小。例如,一个包含name、sno、sex和score的struct,由于编译器的默认对齐策略,其大小可能是180或160字节。可以通过#pragma pack(n)伪指令改变对齐方式,影响结构体的字节数。理解这些细节对于优化内存使用和提高程序性能至关重要。
摘要由CSDN通过智能技术生成

朗讯的笔试题是这样的:

Typedef union student

{

       Char name[10]

       Long sno;

       Char sex;

       Float score [4];

} STU;

Main ()

{

STU a[5]

Printf(“%d/n”,sizeof(a)

}

答案是80 ,因为union是可变的以其成员中最大的成员作为 union的大小!

但是换成是 struct又是多少呢?

Typedef struct student

{

       Char name[10]

       Long sno;

       Char sex;

       Float score [4];

} STU;

Main ()

{

STU a[5]

Printf(“%d/n”,sizeof(a)

}

答案是 180  ????为什么不是 (10+4+1+16)*5=155? 因为struct 有个叫对齐方式的问题:

         不对齐的数据存取在x86上影响速度,因为在不对齐的时候,对于小的可能会影响 其效率,对齐即是多分配一些字节,填充无用数据,以空间的损失来换取消率。

       struct是一种复合数据类型,其构成元素既可以是基本数据类型(如intlongfloat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值