正文

C++内存管理2009-04-03 14:05:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/forc/41944.html

分享到:

又把林锐的高质量程序设计指南看了一遍, 感觉收获还是挺大的,下面把内存管理一章中的主要注意环节提炼出来,和大家分析一下,这大部分都是原书中摘下来的,如果一明白可以去找这个本书看看,网上也有得下,找不到的我这也有,我也可以传给大家. 内存分配方式有三种: 1、从静态存储区域分配。内存在程序编译的时候就已经分配好了,这些内存在程序的整个运行期间都存在。例如:全局变量,static变量等。 2、在堆栈上分配。在函数执行期间,函数局部变量的存储单元都创建在堆栈上,函数结束时这些存储单元自动释放。 3、从堆(heap)或自由存储空间上分配,亦称动态内在分配。程序在运行期间自己分配和释放内存,常用new和delete。 注意: 1、函数的return语句,不要返回指向“栈内存”的指针或者引用,因为该内存在函数结束时被自动释放; 2、使用free()和delete释放了内存后,没有将指针设置成NULL,产生“野指针”; 3、我们申请内存后,应该立即检查指针值是否为NULL或者进行异常处理,以防止使用值为NULL的指针,我们可以在函数的入口处用assert(p!=NULL)来进行检查以避免输入非法参数或者用if语句来判断。 4、不要忘记初始化指针、数组和动态内存,防止将未初始化的内存作为右值使用; 5、释放内存之后,立即将指针设置为NULL,防止产生“野指针”。 6、如果函数参数是一个指针,不要指望用该指针去申请动态内存。如果非得用指针参数去申请内存,那么应该改用“指向指针的指针”或者“指针的引用”;同时用函数返回值来传递动态内存; 7、不等于NULL的指针不一定是有效指针,所以一定不要忘记初始化指针变量为NULL或者有效地址。 8、指针消亡了,并不表示它的所指向的内存会被自动释放;内存被释放了,并不表示指针会消亡或者成为NULL。 9、malloc()的原型:void *malloc(size_t size);对应的void free(void *memblock)  

阅读(2845) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册