自己在处理C++内存分配上的一点心得,如果有错误,欢迎大家指出。
变量和对象在内存中的分配都是编译器在编译程序时安排好的,但同样带来了不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。动态内存分配解决了这个问题。
C/C++定义了4个内存区间:代码区,全局数据区,栈区,堆区。定义变量是在编译程序的时候就进行的静态存储分配。所有的动态分配都是在堆区进行的。不过是不能说的这么绝对的,与编译器和库都是有关联的。函数的参数未必通过堆栈进行分配,这与具体的编译器都是有关的。而对于内存分配失败时的返回值也不一定为NULL,很多的编译器都可以捕获new操作符抛出的异常。
全局数据区 代码区 栈区 堆区
data code stack heap
全局变量 函数 局部变量 new,delete申请的空间
静态数据 函数参数
常量 返回地址
返回数据
堆内存的分配和释放是重复利用有