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

说明:

  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://nhjcxspj.xhstdz.com/xwnews/347.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://nhjcxspj.xhstdz.com/mobile/ , 查看更多   
最新文章
fridayai智能写作app v1.1
fridayai智能写作app非常的优秀,随着智能技术的不断发展,fridayai智能写作app应运而生。这款智能化的文章生成工具将为你的写作
Docker初级学习指南
跟着B站狂神学习的笔记,若有不足请多担待!!!1.卸载旧版去查官网吧Docker是一个Client-Server结构的
Candy改进版:自适应一键划词搜索/一键输入搜索
君子生非异也,善假于物也!本文就是一个极好的例子:万年书妖用AHK开发了超级小工具Candy,而网友Xu Sylve又进行改进,以满足个
1200多套微信小程序源码-史上最全的不同行业的源码集合
史上最全小微信小程序分类,需要的自行下载:o2o行业 | - 盒马鲜生 | - 轻客洗衣 互联网行业 | - 云文档 | - 仿ofo
10个最难回答的Java面试题(1)
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪&#
DeiT-LT:印度科学院提出针对长尾数据的DeiT升级模型 | CVPR 2024
为在长尾数据集上的应用,通过蒸馏标记引入知识,以及使用分布外图像并重新加权蒸馏损失来增强对尾类的关注。此外,为了减轻过拟
20、2n皇后问题(使用回溯太难,首先得学N皇后问题)
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1=n=200。 思路: 先将16进制转换成2进制,
Google AdWords新界面发布 增加多项新功能
谷歌全球副总裁刘允博士    2009年8月12日,搜索巨头谷歌公司宣布AdWords新界面在中国正式上线。据了解,与上一版本相比,新
360沙盘能多开微信吗-如何使用360沙箱进行游戏多开
发布时间:2024-04-18 04:48 你是否曾经遇到过这样的情况:想要在微信上同时登录多个账号,但是却发现无法实现。如果你也有这样
360压缩 官方正式版
360压缩软件官方版相比传统软件,压缩速度提升了2倍以上,支持更多、更全面的压缩格式。360压缩软件官方版相比传统压缩软件更快
相关文章