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

[编程技巧] C++中优化BOOL 变量的声明

通常我们会这样声明BOOL 变量:

class CMyClass {
...
BOOL m_bVar1;
BOOL m_bVar2;
BOOL m_bVar3;
BOOL m_bVar4;
BOOL m_bVar5;
BOOL m_bVar6;
BOOL m_bVar7;
BOOL m_bVar8;
...
};

考虑到BOOL 变量在Win32 下其实是一个int ,占4个字节,那么上面8个BOOL变量就会占去 32个字节

typedef int BOOL; // BOOL takes 4 bytes

其实,我们可以改变BOOL变量的声明来使之只占一个bit:

class CMyClass {
...
BOOL m_bVar1:1;
BOOL m_bVar2:1;
BOOL m_bVar3:1;
BOOL m_bVar4:1;
BOOL m_bVar5:1;
BOOL m_bVar6:1;
BOOL m_bVar7:1;
BOOL m_bVar8:1;
...
};

上面的代码中,每个BOOL 变量只占了1个比特(bit), 那么上面8个BOOL变量就会占去 1个字节
内存节省了32倍!!!

不过从另外一方面, CPU 在处理这些bit类型的BOOL变量的时候, 需要做位运算来把其中的值取出来, 所以会额外消耗CPU资源。 使用的时候需要综合考虑内存和速度之间关系。

相关文章:

  • [Windows编程] C++中 bool,BOOL ,VARIANT_BOOL 的区别
  • [IE技巧] 让IE 以全屏模式启动
  • Wpf GridSplitter usage Sample
  • 移动硬盘WINPE启动盘安装GHOST系统图解
  • 移动硬盘或U盘 WINPE启动盘安装方法图解
  • css style override
  • winPE下安装系统ghost恢复系统图文详细教程
  • FLASHBOOT1.40 制做U盘启动盘图解
  • 莫瑞茨:怎样分辨只想暴富的人和真正希望创业的人
  • 晨枫U盘维护工具V2.0 安装教程
  • J2ME GUI实战之9 ----------自定义控件布局,DIY Layout
  • PHP配置文件翻译
  • 手把手教你Symbian开发(书目征求意见)
  • Asp.Net Cache
  • Asp.Net Sync ASync Processing request
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【刷算法】求1+2+3+...+n
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Cumulo 的 ClojureScript 模块已经成型
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java IO学习笔记一
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • nodejs调试方法
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Python中eval与exec的使用及区别
  • spring-boot List转Page
  • vue总结
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 山寨一个 Promise
  • 微信小程序--------语音识别(前端自己也能玩)
  • 一天一个设计模式之JS实现——适配器模式
  • 译有关态射的一切
  • hi-nginx-1.3.4编译安装
  • ​一些不规范的GTID使用场景
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #AngularJS#$sce.trustAsResourceUrl
  • #if #elif #endif
  • (Git) gitignore基础使用
  • (二)构建dubbo分布式平台-平台功能导图
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)大型网站的系统架构
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET MVC第五章、模型绑定获取表单数据
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
  • [C++]类和对象【上篇】