当前位置: 首页 > news >正文

C语言结构体之位段

 位段(节约内存),和王者段位联想记忆

        位段是为了节约内存的。刚好和结构体相反。

        那么什么是位段呢?我们现引入情景:我么如果要记录一个人是男是女,用数字0 1表示。我们发现只要一个bit内存就可以完成我们想要的情况。那么我们这时就可以用位段

        位段的语法

        

        后面的 1,4就是分配的比特数。变量占1bit,b变量占4bit。如果我们要详细说明语法,我们首先要了解它是增么分配类存的。

        位段的内存分配(vs里面)

                内存分配和前面的类型有关,a是char类型。所以要用char的一个字节来进行分配

                那么会从右往左进行分配,a需要一个bit就分配1bit

                然后继续分配b的

                那么整个结构体内存就占1字节。如果是下面的情况:

                

                那么a给了5bit,但是我们b无法在这个字节开辟内存了。所以跳到下个字节:

                然后再从右到左开辟

                那么就开辟好了,一共占2个字节。

                我们以一个字节为单位是依据哪里来的呢?就是char来决定的,如果换成int,就要一次以4个字节就是32个bit来开辟内存。

                我们要注意一个细节,前面的例子a,b存在一个字节里面是a,b都是char的情况下。所以我们为了保证位段开辟内存的稳定,我们尽量要用同一个内型的变量开辟。

                 那么语法我们自然而然的就懂了。什么时候用char,什么时候用int。如果是开头的只用1个bit我们就用char,最后产生1字节的内存消耗

        位段的缺点

                因为位段以一个类型单位字节为单位在内存中规划,不同编译器的规划方向不同,VS是从右向左存储,连续存放直到存不下的时候就跳过下一个相邻的字节单位继续规划,字节单位地址从小到大。位段舍弃还是利用不确定,int在16位下为2字节,int表示无符号还是有符号也是不确定的。所以位段的可移植性是有点差的。

                所以大家谨慎使用!

        位段的运用

                位段在我们平时发消息里面是很重要的:我们发消息是要有ip地址,自己发的消息,还有一些设么转码的。这些内存并不大。所以我们要用位段来减小内存的开销,提高发送的效率。   

                     

           位段的注意事项

                因为位段是以bit来算的,而地址是对应字节的。所以段位是没有地址的!

                

                只有结构体名可以取地址,其内部的成员是不能取地址的!                       ​​​​​​​      ​​​​

                 

http://www.lryc.cn/news/325764.html

相关文章:

  • 2016年认证杯SPSSPRO杯数学建模D题(第二阶段)NBA是否有必要设立四分线全过程文档及程序
  • 登录校验解决方案JWT
  • Flutter开发进阶之瞧瞧BuildOwner
  • 大量免费工具使用(提供api接口)
  • 网络探测工具Nmap介绍
  • 20240319-2-机器学习基础面试题
  • 0202矩阵的运算-矩阵及其运算-线性代数
  • python中的__dict__
  • 数学分析复习:无穷乘积
  • 02 React 组件使用
  • 你就是上帝
  • Spring Cloud: openFegin使用
  • 流畅的 Python 第二版(GPT 重译)(二)
  • Flutter 旋转动画 线性变化的旋转动画
  • 【Web应用技术基础】HTML(5)——案例1:展示简历信息
  • ethers.js:wallet(创建钱包,导入助记词,导入私钥)
  • 面试笔记——Java集合篇
  • 在 IntelliJ IDEA 中使用 Terminal 执行 git log 命令后的退出方法
  • 架构整洁之道-读书总结
  • 蓝桥杯学习笔记(贪心)
  • 【无标题】如何使用 MuLogin 设置代理
  • 芒果YOLOv8改进135:主干篇GCNet,统一为全局上下文建模global context结构,即插即用,助力小目标检测,轻量化的同时精度性能涨点
  • 全面:vue.config.js 的完整配置
  • 海量数据处理项目-账号微服务注册Nacos+配置文件增加
  • DNS 服务 Unbound 部署最佳实践
  • 力扣HOT100 - 42. 接雨水
  • 攻防世界-baby_web
  • 数据可视化基础与应用-04-seaborn库从入门到精通01-02
  • 学习 zustand
  • 竞赛 opencv python 深度学习垃圾图像分类系统