结构体的大小,位段

结构体的定义struct stu{int a ; char b; double c;struct stu *p ;}s1,s2;

这里的s1,s2为全局变量,当结构体自引用时,需要引用地址,而不是成员,当引用成员时,会造成死递归的现象,无法计算结构 体的大小; 当时用指针引用自身的时候,可实现数据链表的结构;

关于结构体的大小:C语言标准:结构体在定义成员时第一个成员偏移量(偏移量为0),第二个成员开始,成员放在其对齐数的整数倍地址上,对齐数为成员大小与默认对齐数之间的最小值,且最终结构体的大小为结构体内部最大对齐数的整数倍;当含有嵌套结构体时,嵌套结构体的对齐数为其结构体内部的最大对齐数;

这种现象为内存对齐,这是C语言的标准规定,原因一般解释为两类,硬件限制导致硬件只能读取特定位置的数据,性性性性性性性 性能原因,假设计算机一次读四个字节,那么固定对齐之后,能使计算机不重复读取,提高效率。

结构体传参优先使用结构体指针; 内存占用小,可执行的操作也更多;

结构体的位段: 位段的成员必须是整型家族int ,unsigned int,或者char 生命方法 char _a: 2; 表明a占用两个比特位.

在编译器当中,使用位段功能之后 ,假如 a=2; 此时内存当中 00000000变为00000010或者10000000由编译器决定,VS当中, 为从右向左,且当旧空间不够时,直接使用新空间。

在不同编译器中,当初始开辟的字节不足够来放下下一个内存数据是,会新开辟的空间,而有些编译器会让新空间存储全部下个一内存数据,而有些编译器只会存储一部分数据,将另一部分数据存放在之前开辟的空间当中,因因因因因因因因因因此跨平台的程序, 不建议使用位段功能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值