【笔记】空结构体多大

struct student

{

}stu;

sizeof(stu)的值是多少呢?

很遗憾,不是0,而是1为什么呢?你想想,如果我们把struct student 看成一个模子

的话,你能造出一个没有任何容积的模子吗?显然不行。编译器也是如此认为。编译器认为任何一种数据类型都有其大小,用它来定义一个变量能够分配确定大小的空间。既然如

此,编译器就理所当然的认为任何一个结构体都是有大小的,哪怕这个结构体为空。那万

一结构体真的为空,它的大小为什么值比较合适呢?假设结构体内只有一个char 型的数据

成员,那其大小为1byte(这里先不考虑内存对齐的情况).也就是说非空结构体类型数据最

少需要占一个字节的空间,而空结构体类型数据总不能比最小的非空结构体类型数据所占

的空间大吧。这就麻烦了,空结构体的大小既不能为0,也不能大于1,怎么办?定义为0.5

byte?但是内存地址的最小单位是byte0.5 byte 怎么处理?解决这个问题的最好办法就是折中,编译器理所当然的认为你构造一个结构体数据类型是用来打包一些数据成

员的,而最小的数据成员需要byte,编译器为每个结构体类型数据至少预留byte

的空间。所以,空结构体的大小就定位byte

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值