内存分为哪几部分和static的作用详解http://blog.chinaunix.net/uid-14114479-id-1988497.html
1、)栈:系统分配,系统收回 (存放函数的参数 局部变量 函数的返回值) 是一种线性结构,在程序执行的时候调用,结束时就会被销毁,效率很高,但堆上容量有限
2、)堆:程序员自己分配,程序员自己收回 (new/delete) 是一种链式结构
3、)自由存储区:c语言中malloc/free用的,和堆差不多
4、)全局区:全局变量和静态变量 程序一开始他就存在了,一直到程序结束时才会被销毁
c语言中会分初始化与未初始化,未初始化的全局变量和静态变量在一块内存中,初始化的全局变量和静态变量在一块内存中
5、)常量区:存放常量
动态内存的分配与静态内存的分配区别
1、)时间不同:静态分配是在程序的编译和链接时,而动态分配是在程序的调用和执行时分配的
2、)空间不同:动态分配可以在堆中,也可以在栈中,静态分配只能在栈中
c++中的动态分配
1、)非数组
int* p0 = new int(5);
delete p0;
2、)数组
int* p1 = new int[5]{1,2};
delete p1[];
指针数组和数组指针的区别http://www.cnblogs.com/yingying0907/archive/2012/07/31/2616975.html
指针数组:一个数组里放的全是同一类型的指针 如:int* p1[3]; 里面放了3个指向int型的指针
数组指针:指向一个一维或者多维的指针 如:int* p;可以指向一维数组 int (*p1)[4];二级指针指向一个二维数组
注意:
1、)动态分配n为数组,则返回n-1为数组指针
如:int(*p1)[4] = new int[4][4]; delete[] p1;
2、)不能delete已经删除过得内存
3、)不能删除野指针
4、)能够delete空指针
5、)定位分配内存就是在已经获得的内存上再次分配
如:
格式:new(指针)类型(初值)
int arr[5] = {0};
int* p = new (arr) int(3);
转载于:https://blog.51cto.com/08290710/1630015