1、 堆内存的作用
程序在内存中有4个区域,即代码区、全局数据区、栈区和堆区。全局数据区、栈区都是静态分配区域;堆是程序运行时动态使用的一个内存空间,如果要在堆中分配内存空间,必须使用特定的函数和操作符。另外,若不再需要分配的空间则必须释放。
2、 堆内存的申请和释放
malloc与free和new/delete是C++的运算符,它们都可用于申请动态内存和释放内存,但是malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能够完成清理和释放内存工作的运算符delete。
malloc函数的原型为:
void * malloc(unsigned long);
参数unsigned long类型的表达式,用来表示需分配的内存单元(单位是字节)数量。函数返回void *型的指针,指向分配内存块的首地址。由于malloc函数返回的地址是void*类型,因此不能直接被使用,所以引用该函数时都必须进行类型转换。
free的函数原型为:
void free(void *);
用malloc函数在堆内分配的空间系统不会自动释放,必须由程序设计者在程序中用free函数来释放。
C++所独有的开辟和释放对内存空间的方法——new修饰符和delete修饰符,new和delete修饰符的操作并不需要头文件的支持,这是C++所独有的new操作要比malloc更为简单,直接说明开辟的类型的数目就可以了,delete使用的时候如果是数组那么必须使用delete[]。
3、 实例代码
(未完待续)
想要获得更多内容,可点击:《Visuanl C++代码参考与技巧大全》学习笔记——索引随笔