C++中把内存详细的分成了5个区域
-
栈
函数的局部变量
存储区,系统自动分配和释放 -
堆
程序员动态申请的内存,new
出来的内存,或者malloc出来的内存。分别要用delete和free手动释放,防止溢出 -
全局/静态存储区
全局变量和static静态变量存储区 -
常量存储区
例如常量字符串等"I am Chinese" -
程序代码区
存放程序的区域
C++申请动态内存是new/delete,比C的malloc/free好用,本质也是调用C的方法,但是多了初始化等等
-
new/delete
new不但分配了内存,还会做一些初始化工作,delete也会做一些额外的清理工作
例如new一个类的指针,会调用这个类的构造函数进行初始化工作int *p1 = new int //单个变量指针 int *p2 = new int(10); //顺带初始化了 int *p3 = new int[10] //申请一个数组,指针指向它 delete p1; delete p2; delete [] p3;
-
malloc/free
申请失败返回NULL,写C++程序的时候尽量就别用了,就new/delete吧//很笨,只会申请一个大小为**的内存,返回是空指针,不知道指向谁,还要强制类型转换成(int*) int *p1 = (int*)malloc(sizeof(int)); int *p2 = (int*)malloc(10*sizeof(int)); //释放的时候倒是简单,不管数组还是单个变量,不用加[] //!!!!!!!注意是个free函数,不是 free p1; free(p1); free(p2);