结构体大小

struct到底多大呢?

struct总是被当作一个书包,用一个比较不恰当的例子来说,就像是你要去旅游,但是用小包放不下你想带的东西,因此需要一个大包或者行李箱来装你想带的东西。这个行李箱就像是一个struct。
结构体经常被用于嵌入式系统、控制协议以及相互传输通信等等方面。比如,需要在客户端和服务端进行通信的时候,简单的用字符串指针去传输,使得传输容易出错误。因此可以将很多字节的数据进行封装,这样的话,效率也高,也不容易出错。但是,在使用结构体的时候,你们想过它有多大呢??

空结构体

struct Test_void_Struct
{

}T_V_S;

大家,想想这个空的结构体多大呢?
这里可以使用多个编译器去试一下。用过VC尝试之后,大小为1个字节,不是0;
在内存中,最小的存储单位是1个字节,因此这里编译器可能会为每个空结构体预留1个字节;

sizeof(T_V_S);

大家可以去多个编译器中试一下;

内存对齐

struct Test_Struct01
{
	char a;
	short b;
	short c;
	int d;
	long long a1;
}T_S01;

大家想想,这个结构体T_S01多大呢?

sizeof(T_S01);

答案是:24
在编译器中,为了提高程序的性能,数据结构应该尽可能在边界上对齐。

charshort----short----------------
int----------------------------
long long----------------------------

就像这个表格一样,每一行是8个字节(每一个小表格是一个字节),在32bit的计算机中,char为1个字节,short为2个字节,int为4个字节,long long为8个字节。
其中,在第一行中,short占有2个字节,这一行只剩下三个字节,因此int放不下了,这一行资源已经用完了;
第二行中,int占有4个字节,剩下4个字节,long long已经放不下去了,第二行的资源也就用完了;
因此,第三行的就被long long占满;
最后就是24个小空格,也就是24个字节;

预处理对齐

在编译器中,可以指定对齐多少个字节,上面的例子只是8个字节对齐;

#pragma pack(8)

这一行代码就是按多少的字节对齐;

谢谢大家

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃指针的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值