内存分为哪几部分和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);