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资源。使用的时候需要综合考虑内存和速度之间关系。

时间: 2024-12-02 23:37:53

C++中优化BOOL变量的声明的相关文章

Swift中常量和变量的声明

常量是在程序运行过程中,不会被修改的量.也就是说,常量一经赋值,就不能再次赋值了. 变量是在程序运行过程中,可以被多次赋值的量.也就是说,常量即使已经赋值,还可以再次赋值. 在C语言中,如果我们要声明常量,需要在类型前面加上const.例如,声明一个值为10的整型常量i的语句如下: const int i = 10; 在Swift中,我们使用let来声明常量,使用var来声明变量.例如,同样是声明一个值为10的整型常量i的语句如下: let i: Int = 10 声明一个值为20的整型变量j的

C++编程中变量的声明和定义以及预处理命令解析_C 语言

关于C++变量的声明和定义 我们已经知道,一个函数一般由两部分组成:声明部分和执行语句. 声明部分的作用是对有关的标识符(如变量?函数?结构体?共用体等)的属性进行说明.对于函数,声明和定义的区别是明显的,前边已说明,函数的声明是函数的原型,而函数的定义是函数功能的确立.对函数的声明是可以放在声明部分中的,而函数的定义显然不在函数的声明部分范围内,它是一个文件中的独立模块. 对变量而言,声明与定义的关系稍微复杂一些.在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如int a;):另一

Visual C#2005快速入门之声明bool变量

visual|变量|快速入门 与现实世界不同,在编程的世界中,每一件事情要么黑,要么白:要么对,要么错:要么是真的,要么是假的.例如,假定你创建一个名为x的整数变量,把值99赋给x,然后问:"x中包含了值99吗?"答案显然是肯定的.如果你问:"x小于10吗?"答案显然是否定的.这些正是布尔(Boolean)表达式的例子.一个布尔表达式肯定求值为true或false.   注意 对于这些问题,并非所有编程语言都会做出同样的回答.例如,一个未赋值的变量有一个未定义的值,

java中为什么有的变量声明而不赋值?

问题描述 java中为什么有的变量声明而不赋值? java中为什么有的变量声明而不赋值?而有的就值,那什么情况下要赋值,什么情况下不赋值 解决方案 比如对象变量,而调用这个变量的构造函数非常耗费时间,所以我们等用到的时候再创建,如果程序运行完都不访问它,就根本不创建,这样可以提高效率. 对于简单变量,比如int float一类的,建议随手给一个初始值. 解决方案二: 你这个问题给你举个例子,你应该就能理解了 例如: int a; 这是只声明不赋值,则只会在内存的栈区创建引用,堆中并无此引用的指向

【新手】布尔型变量的声明用bool和double的区别?

问题描述 [新手]布尔型变量的声明用bool和double的区别? 布尔变量的声明不该是用bool么,看书上用的是double. 我想知道用bool和double声明布尔变量有什么区别?谢谢. 附程序: #include<iostream.h> void main() { double flag; //我用bool flag测试了一下,运行结果是一样的. flag = true; cout<<flag<<endl; } 解决方案 这个看你对C++和C语言的理解,其实语言

Javascript中的循环变量声明,到底应该放在哪儿?

不放走任何一个细节.相信很多Javascript开发者都在声明循环变量时犹 豫过var i到底应该放在哪里:放在不同的位置会对程序的运行产生怎样的影响?哪一种方式符合Javascript的语言规范?哪一种方式和ecma标准未来的发展 方向匹配?本文将对四种常见的声明循环变量的书写方式进行简单的分析和比较. 习惯1:不声明直接使用 function loop(arr) {      for (i = 0; i < arr.length; i++) {          // do somethin

js 声明数组和向数组中添加对象变量的简单实例_javascript技巧

数组有四种定义的方式 使用构造函数: var a = new Array(); var b = new Array(10); var c = new Array("first", "second", "third"); 或者数组直接量: var d = ["first", "second", "third"]; 扩展: function ObjStory(id,biaoti,author

c/c++中变量的声明和定义深入解析_C 语言

不管是函数还是变量的声明 ,都是为了告诉编译器我要使用这个变量或者函数了,用于类型检查.在定义 的时候编译器是不会分配任何内存的, 比如下面的函数: 复制代码 代码如下: void func() {      int a ;      int b = 0 ;      a = 0 ;} 当函数执行到int a ;的时候,这是一个声明,编译器不会为其分配内存空间 .当执行到a = 0; 这是一个定义,编译器才会为其分配内存空间.因此声明不一定是定义,定义一定就是定义,还可以包含声明.但是下面的这种

Objective-C编程中语句和变量的一些编写规范建议_IOS

语句 条件语句 条件语句体应该总被大括号包围.只有一行代码最好也加上,否则会带来安全隐患. 复制代码 代码如下: // 推荐 if (!error) {     return success; } // 不推荐 if (!error)     return success; if (!error) return success; 尤达表达式(Yoda) 不要使用尤达表达式.(名字起源于星球大战中尤达大师的讲话方式,总是用倒装的语序) 复制代码 代码如下: // 推荐 if ([myValue i