C++ 中的内存区域分为6块:
- 常量数据区:存储字符串等在编译期间就能确定的值。类对象不能存在与这个区域中。在程序的整个生存周期内,区域中的数据都是可用的。区域内的所有数据都是只读的,任何企图修改本区域数据的行为都会造成无法预料的后果。
- 栈区:存储自动变量。栈区中,内存一旦被分配,对象就立即被构造好了;对象一旦被销毁,分配的内存也立即被收回。
- 自由存储区:是 C++ 的两个动态内存区域之一,使用 new 和 delete 来予以分配和释放。
- 堆区:是另一个动态存储区域,使用 malloc、free 以及一些相关变量来进行分配和回收。
- 全局/静态区:在程序启动时才被分配,而且可能直到程序开始执行的时候才被初始化。比如,函数中的静态变量就是在程序第一次执行到定义该变量的代码时才被初始化的。对那些跨越了编译单元的全局变量进行初始化操作的顺序是没有被明确定义的,因而需要特别注意管理全局对象(包括静态类对象)之间的依赖关系。
另外注意,C++ 标准对于堆和自由存储区是否有联系没有予以详细说明,不同编译器可能有不同的实现。
文章来源:
http://my.donews.com/robinchow/2007/01/14/kvdartgbqpsrlrmsxjgnplhdrqqyqtkapnag/
C++ 中 bool 是一个基本类型,可以通过各种方法来模拟它,但是都存在不同的缺陷:
- 使用 typedef 模拟,bool 不允许重载。
- 使用 #define,bool 不允许重载且通常破坏了 #define。
- enum bool允许重载但在条件表达式中不能进行自动类型转换。bool b = (i == j)是错误的,因为 int 不能隐含地转换成 enums。
- bool 类允许重载但不能让 bool 对象在条件中作测试,除非它能提供自动转换到基本类型,但是提供自动转换却通常会干扰函数重载解析过程。
文章来源:
http://my.donews.com/robinchow/2007/01/15/bszvusphgepqbphvticopjkpfadfapccibyd/