读高质量c/c++编程之内存管理笔记1
2012-05-31 22:51
288 查看
在学习c/c++时,对内存管理这块一直都有很多不熟悉的地方。在温习高质量c/c++编程中的内存管理,顺便记录学习笔记。牢记再心。谢谢林锐博士的好文章。。
1.内存分配方式
1)从静态存储区域分配。比如static,全局变量。这些是编译器对代码进行编译的时候就确定好了,同时这些内存在整个运行期间都存在,直到程序结束,系统自动回收。(如果是通过malloc/new的话需要自己手动释放 - -)。
2)在栈上创建。大多数在运行函数时,创建的变量,在函数结束时会自动被释放掉。(对于通过malloc/new的话同上)
3)堆上分配。也称动态内存分配。通过malloc/new申请内存,需要我们自己使用free/delete释放内存。
2.常见的内存错误及其对策
1)内存分配未成功,却使用了它。解决方法是,在对指针使用时对其检验是否为NULL。如果是函数的参数,则对其断言;如果是malloc/new申请内存,则使用if(NULL == p)对其检查。这里有个疑问?如果每次malloc/new时,都对其检查会不会重复,多余??
2)内存分配成功,但尚未初始化。在c/c++里,如果声明一个变量,并未给它初始化时,此时它的值是随机的。尤其是内置类型,数组。
3)内存分配成功并初始化,但操作内存的边界。数组越界。这是一个常出错的地方。
4)没有释放内存。导致内存泄露。原则就是谁申请,谁释放。malloc/free,new/delete这都是应该成dui
1.内存分配方式
1)从静态存储区域分配。比如static,全局变量。这些是编译器对代码进行编译的时候就确定好了,同时这些内存在整个运行期间都存在,直到程序结束,系统自动回收。(如果是通过malloc/new的话需要自己手动释放 - -)。
2)在栈上创建。大多数在运行函数时,创建的变量,在函数结束时会自动被释放掉。(对于通过malloc/new的话同上)
3)堆上分配。也称动态内存分配。通过malloc/new申请内存,需要我们自己使用free/delete释放内存。
2.常见的内存错误及其对策
1)内存分配未成功,却使用了它。解决方法是,在对指针使用时对其检验是否为NULL。如果是函数的参数,则对其断言;如果是malloc/new申请内存,则使用if(NULL == p)对其检查。这里有个疑问?如果每次malloc/new时,都对其检查会不会重复,多余??
2)内存分配成功,但尚未初始化。在c/c++里,如果声明一个变量,并未给它初始化时,此时它的值是随机的。尤其是内置类型,数组。
3)内存分配成功并初始化,但操作内存的边界。数组越界。这是一个常出错的地方。
4)没有释放内存。导致内存泄露。原则就是谁申请,谁释放。malloc/free,new/delete这都是应该成dui
相关文章推荐
- 高质量C/C++编程笔记.
- C++高质量编程指南笔记(三)
- C/C++高质量编程笔记-第二章 程序的版式
- C++高质量编程学习笔记(3)
- C/C++高质量编程笔记
- 高质量的c/c++编程有关malloc分配内存不足的问题
- 高质量C++/C编程指南学习笔记(上)
- 高质量C/C++编程指南笔记
- C/C++高质量编程笔记
- 高质量C++/C编程指南学习笔记(上)
- C++高质量编程指南笔记(一)
- <<Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法>>笔记-内存管理
- C/C++ 高质量编程--内存,二重指针,指针的高级使用解析 3
- C++高质量编程指南笔记(六)
- C++高质量编程指南笔记(七)
- C++高质量编程指南笔记(二)
- C/C++高质量编程笔记-第一章 文件结构
- 高质量C/C++编程指南 阅读笔记(二)内存管理
- 指针参数是如何传递内存的?【高质量C++/C编程指南】
- 高质量程序设计指南-c/c++语言:笔记之内存管理