[编程技巧] C++中优化BOOL 变量的声明
2009-03-14 08:05
405 查看
通常我们会这样声明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资源。 使用的时候需要综合考虑内存和速度之间关系。
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资源。 使用的时候需要综合考虑内存和速度之间关系。
相关文章推荐
- [编程技巧] C++中优化BOOL 变量的声明
- [编程技巧] C++字符串初始化的优化写法
- [编程技巧] C++字符串初始化的优化写法
- [编程技巧] C++字符串初始化的优化写法
- ../include/my_global.h:1107: 错误:对 C++ 内建类型‘bool’的重声明
- c/c++中extern用来声明全局变量
- C++全局变量的声明和定义
- ARM处理器NEON编程及优化技巧三—矩阵乘法的实例
- C++全局变量的声明和定义
- android C编程技巧 及 C/C++开发测试(转)
- Android 用户界面编程技巧和设计模式(性能优化)
- C++编程技巧推荐
- Lua 编程技巧及优化
- C和C++关于变量声明的区别以及一个矛盾的现象
- T-SQL 编程规范和优化技巧
- C++中,全局阈只能声明、初始化变量; 不能用于赋值、运算、调用函数等
- C++模板编程:如何使非通用的模板函数实现声明和定义分离
- 【C++】编程小结②-- 字符串&定义变量
- C++ 变量声明
- C++ 将成员变量声明为private