C++学习之内存分配空间 一、C++中内存分区模型 c++程序在执行时,将内存大方向分为四块 1、代码块:存放函数体的二进制代码,由操作系统进行一个管理 2、全局块:存放全局变量,静态变量,以及常量 3、栈 区:由编译器自动进行分配与释放,存放函数的参数值,以及局部变量 4、堆 区:由程序员进行分配与释放,若程序员不释放,则程序结束时,由操作系统自动回收 内存分区的意义:不同的区域存储的数据,赋予不同的生命周期,更好的利用系统的资源。 1.1代码快(运行前) 在代码编译完成之后,生成对应的.exe可执行文件(如:hello World.exe),在未执行程序之前,分为两个区域 代码块: 存放CPU执行的机器指令 特点:1、代码区是共享的,对于需要频繁执行的程序,只需要在内存中只有一份即可。 2、代码区是只读的,防止程序被恶意的修改了机器指令 1.2 全局区(运行前) 存放全局变量,静态变量(static int a;),以及常量("hello world"、(全局的)const int b;) 特点:该区中的数据当程序结束中,由操作系统进行释放 1.3栈 区(运行中) 由编译器自动进行分配与释放,存放函数的参数值,以及局部变量 不返回局部变量的地址,由编译器独自释放(如果函数返回的是局部变量的地址,第一次使用的时候,能够得到局部函数的数据, 当再次使用时,将不会提到局部变量的数据(不是二次调用)) 1.4堆 区(运行中) 由程序员进行分配与释放,若程序员不释放,则程序结束时,由操作系统自动回收 在c++中使用new在堆区开辟内存空间(int * P = new int (10);) 手动开辟是使用的是:new (int * P = new int (10);) 手动释放时使用的是:delete (delete P;) int *array = new int[10];//开辟了一个数组在堆中 delete[] array;//释放数组,需要加一个“[]”括号