初识Cpp之 六、内存分配

本文详细介绍了C++中的内存分区模型,包括代码区、全局区、栈区和堆区,并讲解了如何使用new进行动态内存分配,如分配单一变量和数组,以及如何通过delete正确释放内存。同时强调了避免释放已释放内存的重要性。
摘要由CSDN通过智能技术生成

六、内存分配

​ 在C语言中使用的是一套内存分配库函数malloc、calloc、realloc、free来进行内存分配和回收,在C++中仍然可以这样做,但是C++还有更好的方法——new运算符。

(1)C++的内存分区模型

​ C++程序在执行的时候,将内存大致分为4个区域

  • 代码区:存放函数体的二进制代码,由操作系统进行管理;
  • 全局区:存放全局变量和静态变量以及常量,常量包括const修饰的全局常量和字符串常量;
  • 栈区:由编译器自动分配释放,存放函数的参数值,局部变量等;
  • 堆区:由程序员分配和释放,若程序员不释放,则程序结束时由操作系统来释放。

​ 注意事项:

1、栈区存放局部变量——函数不要返回局部变量的指针或者引用

2、堆区主要用C++的new关键字来开辟空间和释放空间。

(2)使用new进行内存分配

​ 使用C++的内存分配运算符new,程序员需要告诉程序new,需要为哪种数据类型分配内存,new将找到一个长度正确的内存块,然后会返回该内存块的地址。例如:

typeName *pointer_name = new typeName;		//通用写法
typeName *pointer_name = new typeName(init_value);	//开辟一块空间并且初始化为init_value
int *pt = new int;		//为pt指针分配了一个int大小的内存空间
double *pd = new double(5.0);		//为pd指针分配了一个double大小的空间并且初始化为5.0

当没有足够的内存空间来进行分配的时候,new会返回一个空指针,我们可以判断new是否返回空指针来判断内存分配是否成功。

使用new创建动态数组:只要将数组的元素类型和元素数目告诉new,必须在类型名后面加上方括号[],其中包含元素数目。

typeName *pointer_name = new typeName [ArrySize];		//通用写法

当程序使用完new分配的内存块时,应该使用delete来释放它们,对于使用new创建的数组,应该使用另一种格式的delete来释放,delete后面必须加上方括号[]

delete [] pointer_name;		//通用写法

举个示例:

int *pt = new int[20];		//分配空间
delete [] pt;			//释放空间

(3)使用delete释放内存

​ C++的内存释放运算符deletedelete的作用是释放已经使用new进行内存分配的空间(不要尝试释放已经释放的内存块,这样做的结果是未定义的)。但是对空指针NULL使用delete是安全的,例如:

int *ps = new int;
int *pt = NULL;
delete ps;			//释放ps指向的内存空间
delete pt;			//释放空指针是安全的
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值