变量的内存分配

来源:互联网 发布:延长壳牌工资知乎 编辑:程序博客网 时间:2024/05/17 04:08

1.内存的分配方式

 

  (1)从静态存储区域分配,内存在程序编译的时候已经分配好,这块内存在程序的整个运行期间都存在。如全局变量,static变量

(2) 从栈上创建。函数局部变量的存储单元可以在栈上创建。函数调用时自动分配,调用结束时这些内存单元被自动释放。栈内存分配运算内置于处理器的指令集中,效率高,但内存容量有限。

(3)从堆上分配,亦称为动态存储区,molloc和new申请任意多少的内存,free和delete释放内存。

 

2.常见内存错误

 

(1)内存尚未分配成功。

       解决办法:在使用之前检查指针是否为NULL

                     如果p是函数的参数,在入口处用assert(p != NULL)进行检查

                     如果用molloc或new来申请内存,用if(p == NULL)或if(p != NULL)进行防错

(2)内存分配成功,但尚未初始化就进行引用

 

(3)释放了内存继续使用

       对象关系过于复杂

       return语句写错。注意不要返回栈内存上的指针或引用

       free或delete释放内存后,没有将指针设置为NULL,导致野指针。

 

参考高质量C/C++编程关于内存的部分,特别是4个关于内存的习题

关于molloc free与new delete的用法:

1.molloc和free是C++/C的标准库函数,而new和delete是C++的运算符

2. new是强类型分配,调用构造函数并初始化,molloc仅仅分配内存空间但不初始化。

    new是自适应类型,molloc需强制类型转换

3.delete调用对象的析构函数,释放内存,而free仅仅是释放内存

4.虽然都申请分配内存,但申请的位置不同。new是在自由存储区(free store).而molloc是在堆(heap)上申请(ISO14882内存管理部分)

原创粉丝点击