生活资讯
【C++】内存管理
2024-12-14 09:22  浏览:78

说明:

  1. 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。
  2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下
  3. 堆用于程序运行时动态内存分配,堆是可以上增长的。
  4. 数据段–存储全局数据和静态数据。
  5. 代码段–可执行的代码/只读常量。

从上面这个我们可以看出,我们对内存的操作绝大部分是在堆区进行的,那么对于C语言的内存管理函数malloc . calloc , realloc 是否还记得

 

malloc函数的使用方法
calloc函数的使用方法
realloc函数的使用方法

因为C语言和C++可以兼容,所以C语言的方式在C++中依然可以使用,但是有时候会很麻烦,所以C++提出了自己的内存管理方式通过 new 和 delete 进行动态内存管理

 

要注意new和delete要匹配使用
new —— delete
new[ ] —— delete[ ]

当然若要申请二维数组,和C语言一样麻烦,分为数组指针和指针数组两种

 
 
 

这里最大的区别是对于自定义类型,new会调用自定义类型的构造函数,delete会调用自定义类型的析构函数

 

从上面我们可以看到一些属性的面孔,malloc,free这是C语言开辟和销毁空间的方式

 
 
 
 

如果是申请内置类型的空间,new/delete 和 malloc/free基本相同
不同的地方在
new/delete是申请单个空间,new[ ]/delete[ ]是申请连续空间
new申请失败会抛异常,malloc申请失败会返回NULL

<1>new的原理
1、调用operator new申请空间
2、调用构造函数,对申请的空间进行构造

<2>delete原理
1、在空间中调用析构函数,将对象中的空间进行清理
2、调用operator delete 函数释放对象空间

<3>new T[N] 的原理
1、调用operator new[ ]函数,在函数中调用N次operator new函数完成对对象空间的申请
2、在申请的空间上N次调用构造函数

<4>delete[ ]的原理
1、在释放空间上调用N次析构函数
2、调用operator delete[ ]函数,在函数中调用N次operator delete函数完成对空间的释放

 
 
 
 

定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象

new (place_address) type
new (place_address) type (initializer_list)
place_address 是一个指针
initializer_list 是类型的初始化列表

定位new表达式一般和内存池配合使用,因为内存池中数据为初始化,所以需要通过new的定位表达式进行显示构造函数初始化

    以上就是本篇文章【【C++】内存管理】的全部内容了,欢迎阅览 ! 文章地址:http://sjzytwl.xhstdz.com/xwnews/347.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://sjzytwl.xhstdz.com/mobile/ , 查看更多   
最新文章
SQL数据清洗:利用SUBSTRING和CHARINDEX处理无效字符
截取字符串 我们在做BI可视化之前,通常需要已经清洗干净的数据才能进行可视化分析。 随着电商的发展,有很多数据都
Python数据分析与展示
快讯:这是本课程第20次开课~~本课程是国家精品在线开放课程“Python网络爬虫与数据分析”的下半部分,欢迎大家加入学习!“我们
MacOS升级ruby版本
1. 历史与起源Bourne Shell (sh) ,即 Bourne Shell,是由 Stephen Bourne 在 1977 年开发的。它是最早的 UNIX Shel
SHOPYY:今天不聊亚马逊,我们只谈独立站
说到跨境电商平台,大部分人跟我一样,最先想到的就是亚马逊、eBay、速卖通、Wish这四大目前主流的平台。跨境电商卖家们借助平台
上外Blackboard在线建课问答第十二期(Q&A)
SISU上外Blackboard在线建课问答第十二期(QA)教师的个人课程列表中有一门《在线课程建设培训》,可自主学习相关资料。课程列表
uniapp开发H5拉起微信支付全流程(含H5获取用户code、openid方法)
这两天遇到一个需求就是开发微信公众号H5界面,需要点击支付按钮拉起微信进行支付。我自己觉得H5和小程序的支付流程还是有
一个月内三刷PB,吴艳妮发声
  澎湃新闻记者 祁东  仅用两周时间,吴艳妮又一次刷新自己的个人最好成绩(PB)。  吴艳妮一个月内三刷个人最好成绩。资
“用C语言实现计算功能”中,对比AI的程序,我的收获
最近写了一个用C语言实现计算功能的程序,已上传。运行截图:然后让文心一言也写了个程序:它只能计算例如3&#
【VS插件】学习笔记|AutoHistory:自动保存你的代码历史文件
你是不是曾经希望自己可以回滚一段你有修改过的工程的代码? 比如说,自己编写的一个程序原本是正常运行的、计算结
相关文章