【C++复习】第二弹-内存管理

目录

前言

 1.结合地址空间来理解不同对象的存储区域

 2.malloc和free以及new和delete的区别

3.什么是内存泄漏?

前言

对于一个程序来说,我们必须知道他的各个位置的变量存放在哪里的,所以我们必须要清楚C++的内存分布。其实内存管理是衡量一个人代码逻辑的重要指标,一旦你掌握了内存,那么程序的运行逻辑在你的眼里就是透明的。下面通过看图和理解两个问题就能理解内存管理。

 1.结合地址空间来理解不同对象的存储区域

我们学习语法的时候,学的都是粗粒度划分的内存分区,也就是我们常说的内核区、栈区、映射区、堆区、静态区(数据段全局和静态)、常量区(代码和只读常量)。如左图。

但是我们学习操作系统的时候,我们知道程序也就是进程在OS上运行的时候,都是在虚拟地址空间上进行的,方便解耦底层的磁盘存储区域。我们就可以细分一下如右图。

细粒度划分就会是内核区,命令行参数和环境变量区,栈区,共享区,堆区,已初始化全局数据 ,未初始化全局数据,只读字符常量区,代码区。

 

 2.malloc和free以及new和delete的区别

malloc和free是我们C语言进场接触到的内存申请方式,但是不方便申请,我们还需要自己对内存的大小进行计算,C++在这个基础上对malloc进行了改进,根据类型自动计算大小,底层原理是调用构造函数。

回答:①new和delete是操作符,malloc和free是库函数,用法上new直接跟类型加申请的个数,malloc是需要计算自己申请了多大的个数,且需要强转一下void*因为他只负责开空间。

②new返回的是对应类型的指针,不需要强转,new就是构造函数加初始化,new失败了抛异常,malloc是返回空指针。

3.什么是内存泄漏,如何预防?

关于内存泄漏,他的本质就是指针丢了,我们指向的内存对象并没有释放,内存依然处于被使用,无法重用和析构。

比如:进程僵尸,长期运行在程序在堆上申请的内存空间没有释放,对应堆内存泄漏和系统资源泄漏。

回答:主要两个方面①事先预防:严谨的设计思维RAII②使用智能指针。③事后补救,内存检查工具。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Python计算相对强弱指数(RSI)进阶

使用Python计算相对强弱指数(RSI)进阶 废话不多说,直接上主题:> 代码实现 以下是实现RSI计算的完整代码: # 创建一个DataFramedata {DATE: date_list, # 日期CLOSE: close_px_list, # 收盘价格 }df pd.DataF…

CodeQL学习笔记(1)-QL语法(逻辑连接词、量词、聚合词、谓词和类)

最近在学习CodeQL,对于CodeQL就不介绍了,目前网上一搜一大把。本系列是学习CodeQL的个人学习笔记,根据个人知识库笔记修改整理而来的,分享出来共同学习。个人觉得QL的语法比较反人类,至少与目前主流的这些OOP语言相比&…

小白投资理财 - 看懂 K 线形态下

小白投资理财 - 看懂 K 线形态下 熊势吞噬牛势吞噬孕育线牛市孕育线熊市孕育线 早晨之星黄昏之星总结 前一篇《 小白投资理财 - 看懂 K 线形态上》介绍了 6 种 K 线形态,有天气预报的,又有灭霸,小叮当,今天介绍另外 6 种在股市上…

认识CSS语法

CSS(网页美容) 重点:选择器、盒子模型、浮动、定位、动画,伸缩布局 Css的作用: 美化网页:CSS控制标签的样式 网页布局:CSS控制标签的位置 概念:层叠样式表(级联样式表…

Linux | Rsync 命令:16 个实际示例(下)

引言 Rsync(远程同步)是Linux/Unix系统中用于远程和本地复制及同步文件和目录的常用工具。 利用rsync命令,您可以轻松地在不同目录、硬盘和网络之间进行数据的远程和本地复制与同步,进行数据备份,以及在两台Linux系统间…

【正点原子K210连载】第四十八章 自学习分类实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第四十八章 自学习分类实验 在上一章节中,介绍了利用maix.KPU模块实现了MNIST的手写数据识别,本章将继续介绍利用maix.KPU模块实现的自学习分类。通过本章的学习,读者将学习到自学习分类应用在CanMV上的实现。 本章分为如下几个小节&#xf…

维乐Senso Edge坐垫,自然并不远,向往就前往

嘿,是不是已经厌倦了城市的钢筋森林,渴望一场说走就走的自然之旅?别急,维乐Senso Edge坐垫带你飞,让我们的车轮一起碾过每一寸向往的土地!    追逐风,拥抱自然。你还记得第一次骑行时的那份…

【功能安全】 独立于环境的安全要素SEooC

目录 01 SEooC定义 02 SEooC开发步骤 03 SEooC开发示例 04 SEooC问答 01 SEooC定义 缩写: SEooC:Safety Element out of Context独立于环境的安全要素 SEooC出处:GB/T34590.10—2022,第9章节 SEooC与相关项什么关系? SEooC可以是系统、系统组合、子系统、软件组件、…

Linux 系统中,将网络配置从 DHCP 改为静态 IP的几种方法

Linux 系统中,将网络配置从 DHCP 改为静态 IP 可以通过几种不同的方法来实现,下面是几种常见的方式: 方法一:使用 connman(Connection Manager) 如果你已经在使用 connman 管理网络,可以通过修…

MATLAB实现遗传算法优化零件拆卸装配问题

零件拆卸装配问题是一个有复杂约束的优化问题,它涉及到零件之间的连接关系、拆卸或装配的顺序、工具的使用、操作成本。 1.假设: (1)零件完整性:每个零件在拆卸和装配过程中保持完整,不发生形变或损坏 &…

MATLAB生物细胞瞬态滞后随机建模定量分析

🎯要点 基于随机动态行为受化学主方程控制,定量分析单细胞瞬态效应。确定性常微分方程描述双稳态和滞后现象。通过随机性偏微分方程描述出暂时性滞后会逐渐达到平稳状态,并利用熵方法或截断方法计算平衡收敛速度的估计值。随机定量分析模型使…

软考中级嵌入式系统设计师笔记分享(二)

1.TTL 电路是电流控制器件,而CMOS 电路是电压控制器件。 2.TTL 电路的速度快,传输延迟时间短(5-10ns),但是功耗大。 常见的串行总线有 SPI、II2C、USB、RS232/RS422/RS485、CAN等;高速串行总线主要有 SATA、PCIE、IEEE 1394、Rapidl0、USB 3…

鸿蒙UI开发——基于全屏方案实现沉浸式界面

1、概 述 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条。 其中状态栏和导航条,通常在沉浸式布局下称为避让区,避让区之外的区域称为安全区。 开发应用沉浸式效果主要指:通过调整状态栏、应用界面和导航条的显示效果来减少状态…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21目录1. The Fair Language Model Paradox摘要研究背景问题与挑战如何解决创新点算法模型实验效果重要数据与结论推荐阅读指数&…

stable-zero123模型构建指南

一、介绍 stabilityai出品,能够对有简单背景的物体进行三维视角图片的生成,简单来说也就是通过调整变换观察的视角生成对应视角的图片。 本项目通过comfyui实现。 二、容器构建说明 1. 部署ComfyUI (1)使用命令克隆ComfyUI g…

6,000 个网站上的假 WordPress 插件提示用户安装恶意软件

黑客使用窃取的凭证感染 WordPress 网站,并向其发送虚假插件,通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种,自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…

C++ 模板编程:解锁高效编程的神秘密码

快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 目录 💯前言 💯泛型编程 💯函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 4.函数模板的实例化 5.模板参…

社交媒体视频素材平台推荐

在内容创作日益重要的今天,社交媒体视频素材的需求不断增加。适合各种平台的视频素材不仅可以提升内容质量,还能吸引更多观众。以下是一些推荐的社交媒体视频素材平台,帮助你找到适合的资源。 蛙学网 蛙学网 是一个专注于社交媒体视频素材的平…

C# 标准绘图控件 chart 多 Y 值的编程应用

C# 标准绘图控件 chart 多 Y 值的编程应用 1、前言2、声明标准绘图控件 chart 命名空间3、使用绘图控件 chart3.1、在窗体中拖入绘图控件 chart ,拖入绘图控件 chart 最简单实用。3.2、在语句中声明加入,但要将 控件和其组件加入窗体或其它容器很麻烦&am…

2025 - AI人工智能药物设计 - 中药网络药理学和毒理学的研究

中药网络药理学和毒理学的研究 TCMSP:https://old.tcmsp-e.com/tcmsp.php 然后去pubchem选择:输入Molecule Name 然后进行匹配:得到了smiles 再次通过smiles:COC1C(CC(C2C1OC(CC2O)C3CCCCC3)O)O 然后再次输入:http…