内存管理

news2024/12/25 12:55:17

目录

C/C++内存分布

引入

分析

说明

C语言内存管理方式:malloc calloc realloc  free

malloc

realloc

calloc

面试题

 C++内存管理方式

new/delete操作符

用法

new和delete操作自定义类型

 operator new和operator delete函数

operator new

​编辑

operator delete

总结

定位new

常见面试题

malloc/free和new/delete的区别

内存泄漏(了解)


C/C++内存分布

引入

栈区:函数参数,局部变量,编译器自动释放内存

堆区:动态内存申请的空间,程序员分配释放,如果不释放,可能会引起内存泄漏

代码区:代码

数据段:const修饰的变量,全局变量,静态变量

常量区:常量,字符串

分析

我们看以下代码

sizeof:求字节大小

strlen:求字符串中字符个数,\0结束

说明

C语言内存管理方式:malloc calloc realloc  free

realloc是在原空间上继续扩大空间,p2和p3指向同一篇空间,两次free报错

malloc

动态开辟内存

realloc

扩大空间

原地扩容:在已经开辟空间后面接着开辟空间

异地扩容:原开辟空间后面无法接着开辟开空间,就拷贝之前空间的内容到新空间,接着扩大空间,并释放掉之前的空间

calloc

开辟空间并将空间初始化

面试题

malloc/calloc/realloc的区别

 C++内存管理方式

C语言内存管理在c++中可以继续使用,但是有些方面用起来比较麻烦,C++提出了自己的内存管理方式,通过new和delete操作符进行

new/delete操作符

new和delete就相当于C语言中的malloc和free,但是new和delete在申请自定义类型空间的使用会调用构造函数和析构函数

用法

申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[ ]和delete[ ];

注意要匹配使用!

new和delete操作自定义类型

注意:与malloc/free不同的是,new/delete在对于自定义类型开空间的同时还会调用构造函数和析构函数

 operator new和operator delete函数

new和delete是用户进行动态内存申请的操作符,operator new和operator delete是系统提供的全局函数,new在底层调用operator new来开辟空间,delete在底层调用operator delete来释放空间

operator new

operator delete

总结

opeartor new也是malloc来申请空间,如果成功申请就直接返回,否则执行用户提供的空间不足的应对措施,如果用户提供措施就继续执行,否则就抛异常(try  catch函数)

operator delete最终也是通过free来释放空间

定位new

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

new(地址)type  或者 new(地址) type (参数)

new(pst)stack(4)

显示调用构造函数

一般配合内存池使用

常见面试题

malloc/free和new/delete的区别

从用法和底层原理来说明

用法:

1.malloc和free是函数,new和delete是操作符

2.malloc开辟的空间不可以初始化,new可以初始化

3.malloc申请空间需要手动计算空间大小,new只需要跟上空间类型即可,如果是多个对象,就在[ ]说明数组元素个数

4.malloc返回值是void*,使用时必须强转,new不需要,后面跟的就是空间类型

5.malloc申请失败是返回NULL,使用必须判空,new失败是抛出异常,需要捕获异常

底层原理:

6.在申请自定义类型对象时,malloc和free只会开辟空间,不会调用构造和析构函数

而new在申请空间成功后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理 

内存泄漏(了解)

用户使用内存后没有及时清理

内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现

内存泄漏会导致响应越来越慢,最终卡死

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1196286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是Ribbon的饥饿加载?有什么优势?

目录 一、什么是Ribbon 二、什么是饥饿加载 三、Ribbon饥饿加载的优势 四、Ribbon饥饿加载的劣势 一、什么是Ribbon Ribbon是一个开源的、基于HTTP和TCP的客户端负载均衡工具,它提供了一个简单的、基于配置的负载均衡策略,可以帮助开发人员更轻松地…

“护肤品销售策略:从“免费拼团”到“3人回本大放送”“

有一个销售护肤品的团队,他们家399块钱一套的护肤品,他们在小程序这一个渠道,只用了23天的时间,就卖出去了2000多万的营业额,你敢信吗? 那么23天的时间,他们是怎么卖出去2000多万的呢&#xff1…

宠物社区系统宠物领养小程序,宠物救助小程序系统多少钱?

当前很多的宠物被抛弃和虐杀,它们没有选择权,我们强制性的把狗带进人类的生活中,然后又无情的抛弃,让它们无家可归,变成流浪狗,它们做错了什么?流浪动物被主人遗弃之后居无定所,时刻…

基于VSCode + PlatformIO创建运行第一个esp32程序

文章目录 使用VSCode创建项目安装驱动下载驱动安装驱动连接开发板电脑识别开发板 编写程序烧录程序第一步、编译程序第二步、烧录程序第三步、开发板观察效果 原理讲解项目源码 在之前的课程,我们已经介绍了ESP32单片机,并且也已经安装好了开发环境&…

upload-labs12-21关

第十二关 提示及源码 $is_upload false; $msg null; if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],strrpos($_FILES[upload_file][name],".")1);if(in_array($file_ext,$ext_arr)){$temp_file $_FILES…

C语言【趣编程】我们怎样便捷输出空心的金字塔

目录 1问题: 2解题思路: 3代码如下: 4代码运行结果如下图所示: 5总结: r如若后续有不会的问题,可以和我私聊; 1问题: 2解题思路: 方法:找规律&#xff0…

记录--vue3 setup 中国省市区三级联动options最简洁写法,无需任何库

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 在写页面的时候,发现表单里面有一个省市区的 options 组件要写,因为表单很多地方都会用到这个地址选择,我便以为很简单嘛。 虽然很简单的一个功能,但是网…

上拉电阻与下拉电阻

文章目录 上拉电阻下拉电阻上下拉电阻作用1、稳定信号2、减少电磁干扰3、提高驱动能力 大家在玩单片机的过程中,一定没少听过上拉电阻和下拉电阻这组名词,那么到底什么是上拉电阻和下拉电阻呢?今天我们一起来简单了解一下 上拉电阻 上拉电阻…

激光雷达标定板是自动驾驶系统中关键部件

中国政府制定了多项产业发展规划,包括《汽车产业中长期发展规划》和《新一代人工智能发展规划》等,旨在推动汽车产业的转型升级,培育具有国际竞争力的汽车品牌,同时鼓励企业加大对自动驾驶技术研发的投入,加快自动驾驶…

目标检测算法改进系列之Backbone替换为VanillaNet

VanillaNet简介 简介:VanillaNet是一种在设计中融入优雅的神经网络架构,通过避免高深度,shortcut和自注意力等复杂操作,VanillaNet简单而强大。每一层都经过精心制作,紧凑而直接,在训练后对非线性激活函数…

医学图像 ABIDE 等数据集 .nii.gz Python格式化显示

nii.gz 文件 .nii.gz 文件通常是医学影像数据的一种常见格式,比如神经影像(如脑部MRI)。这种文件格式通常是经过gzip压缩的NIfTI格式(Neuroimaging Informatics Technology Initiative)。 要在Python中查看.nii.gz文…

初学前端CSS教案(理论+代码+效果图)

文章目录: 一:前言 1.什么是CSS呢? 2.环境 3.HTML5相关 4.瞅瞅CSS代码样式什么样? 二:编码规范 1.声明 2.注释 3.选择器 3.1 块元素选择器{} 3.2 id选择器 " # " 3.3 class选择器 " . &quo…

说说你对React Router的理解?常用的Router组件有哪些?

一、是什么 react-router等前端路由的原理大致相同,可以实现无刷新的条件下切换显示不同的页面 路由的本质就是页面的URL发生改变时,页面的显示结果可以根据URL的变化而变化,但是页面不会刷新 因此,可以通过前端路由可以实现单…

Git 进阶使用

一. Git图形化操作 1.1.什么是图形化管理工具 图形化管理工具是一种通过可视化界面来操作计算机系统或应用程序的软件工具。在软件开发中,它通常用于管理和操作版本控制系统(如Git、SVN等)以及代码开发环境(如IDE)。与…

Leetcode刷题详解——单词搜索

1. 题目链接:79. 单词搜索 2. 题目描述: 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的…

python 对全局变量的修改,需要使用global关键字

is_debug Falsedef get_is_debug():return is_debugdef set_is_debug(dbg):global is_debugis_debug dbg代码review的时候有个同事(我们主要都是开发c代码的,python也会写,但是用的少)说,set_is_debug函数中 is_debu…

自动驾驶算法(十):多项式轨迹与Minimun Snap闭式求解原理及代码讲解

目录 1 多项式轨迹与Minimun Snap闭式求解原理 2 代码解析 1 多项式轨迹与Minimun Snap闭式求解原理 我们上次说的Minimun Snap,其实我们就在求一个二次函数的最优解: 也就是优化函数在约束下的最小值。 但这是一个渐进最优解而不是解析最优解&#xf…

LeetCode16的最接近的三数之和

目录 优化解法暴力搜索 优化解法 看了题解之后的根据题解的意思编写的优化解法,感觉还行,代码算是比较简短了,没有复杂的逻辑,就是写的时候总是只记得记录那个sum,忘记要记录最小的差值,更新min_minus. class Solution {public int threeSumClosest(int[] nums, int target) {…

ros1 基础学习08- 实现Server端自定义四 Topic模式控制海龟运动

一、服务模型 Server端本身是进行模拟海龟运动的命令端,它的实现是通过给海龟发送速度(Twist)的指令,来控制海龟运动(本身通过Topic实现)。 Client端相当于海龟运动的开关,其发布Request来控制…

PACD管理循环

目录 一、何谓管理? 二、PDCA构成 三、解读PDCA 四、总结 一、何谓管理? 1、所谓管理:是指利用拥有的资源,设定计划,并为达到此计划之一切活动的全体。 2、管理是由维持(SDCA)及改善(PDCA)这两个轮子构成。维持是…