内存管理

目录

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.rhkb.cn/news/186561.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H264 NALU分析

H264简介 H.264从1999年开始,到2003年形成草案,最后在2007年定稿有待核实。在ITU的标准⾥称为H.264,在MPEG的标准⾥是MPEG-4的⼀个组成部分–MPEG-4 Part 10,⼜叫AdvancedVideo Codec,因此常常称为MPEG-4 AVC或直接叫…

一文概览NLP句法分析:从理论到PyTorch实战解读

本文全面探讨了自然语言处理(NLP)中句法分析的理论与实践。从句法和语法的定义,到各类句法理论和方法,文章细致入微地解析了句法分析的多个维度。最后,通过PyTorch的实战演示,我们展示了如何将这些理论应用…

云服务器哪家便宜靠谱 | 简单了解亚马逊云科技发展史

云服务器哪家便宜又靠谱呢?为什么说亚马逊云科技在这道题答案的第一行,一篇故事告诉你。 1994年,杰夫贝索斯在西雅图创建了亚马逊,最初只是一个在线书店。 1997年,亚马逊在纳斯达克交易所上市,成为一家公…

webpack的简单使用

什么是webpack(去官网看详细的API) 本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项…

Linux——手把手教你解决sudo指令无法使用的问题

解决sudo指令无法使用的问题 1. 为什么不能使用 sudo指令能够使某一条指令拥有root权限,即以root权限去执行 例如: sudo ls -l //就是以root权限查看当前目录里的内容但是,如果是新创建的普通账户,一般来说一开始是不能执行s…

访问控制列表

目录 ACL ACL原理 ACL包过滤方式 ACL通用命令 查看ACL表命令 删除整张表命令 接口配置ACL ACL分类 标准ACL 标准ACL的动作与条件 通配符掩码 扩展ACL 扩展ACL的动作与条件 命名ACL 前言 书写方式 ACL 含义:访问控制列表,其是一种包过滤…

计算机基础知识49

三板斧的使用(views.py) 三个方法:HttpResponse: 返回的是字符串render : 返回html文件redirect : 返回加载HTML页面的 def html(request):print(from html)# return HttpResponse(request) # 它返回的是字符串return render(request,html.html) # 返回html# ret…

Jenkins CICD过程常见异常

1 Status [126] Exception when publishing, exception message [Exec exit status not zero. Status [126] 1.1 报错日志 SSH: EXEC: STDOUT/STDERR from command [/app/***/publish.sh] ... bash: /app/***/publish.sh: Permission denied SSH: EXEC: completed after 200…

媒体转码软件Media Encoder 2024 mac中文版功能介绍

Media Encoder 2024 mac是一款媒体转码软件,它可以将视频从一种格式转码为另一种格式,支持H.265、HDR10等多种编码格式,同时优化了视频质量,提高了编码速度。此外,Media Encoder 2024还支持收录、创建代理和输出各种格…

openEuler 系统使用 Docker Compose 容器化部署 Redis Cluster 集群

openEuler 系统使用 Docker Compose 容器化部署 Redis Cluster 集群 Redis 的多种模式Redis-Alone 单机模式Redis 单机模式的优缺点 Redis 高可用集群模式Redis-Master/Slaver 主从模式Redis-Master/Slaver 哨兵模式哨兵模式监控的原理Redis 节点主客观下线标记Redis 节点主客观…

使用Nginx和Spring Gateway为SkyWalking的增加登录认证功能

文章目录 1、使用Nginx增加认证。2、使用Spring Gateway增加认证 SkyWalking的可视化后台是没有用户认证功能的,默认下所有知道地址的用户都能访问,官网是建议通过网关增加认证。 本文介绍通过Nginx和Spring Gateway两种方式 1、使用Nginx增加认证。 生…

晶振分频【FPGA】

所有数据对齐晶振。 6分频:【1】 module divider_six // 6分频 【0~2】 ( input wire sys_clk , //系统时钟 50MHz input wire sys_rst_n , //全局复位 output reg clk_out //对系统时钟 6 分频后的信号 );reg [1:0] cnt; //用于计数的寄存器 //cnt:计数器从 0 到…

Flink -- 事件时间 Watermark

1、事件时间: 指的是数据产生的时间或是说是数据发生的时间。 在Flink中有三种时间分别是: Event Time:事件时间,数据产生的时间,可以反应数据真实发生的时间 Infestion Time:事件接收时间 Processing Tim…

远程运维如何更高效的远程管理?向日葵的这几项功能会帮到你

具备一定规模的企业,其IT运维需求普遍会面临设备数量众多、难以统一高效管理、始终存在安全敞口等问题,尤其是针对分部广泛的无人值守设备时,更是如此。 举一个简单的例子,一台位于商圈的无人值守可互动广告机设备,所…

【MySQL习题】各个视频的平均完播率【全网最详细教学】

目录 数据表描述 问题描述 输出示例 解题思路【重点】 正解代码 数据表描述 有以下两张表: 表1:用户-视频互动表tb_user_video_log 数据举例: 说明: uid-用户ID,video_id-视频ID start_time-开始观看时间end_time-结束观…

【Python3】【力扣题】258. 各位相加

【力扣题】题目描述: 【Python3】代码: 1、解题思路:将整数转为字符串,遍历字符串中的数字,求和。 知识点:str(...):转为字符串。为了遍历每个数字。 int(...):转为整数。为了数字…

三菱FX3U系列-定位指令

目录 一、简介 二、指令形式 1、相对定位[DRVI、DDRVI] 2、绝对定位[DRVA、DDRVA] 三、总结 一、简介 定位指令用于控制伺服电机或步进电机的位置移动。可以通过改变脉冲频率和脉冲数量来控制电机的移动速度和移动距离,同时还可以指定移动的方向。 二、指令形…

带你一分钟看懂 “kubernetes”

目录 什么是 Kubernetes Kubernetes 概述 为什么需要 Kubernetes,它能做什么? 什么是 Kubernetes 从官方网站上可以看到,它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。在…

互联网金融P2P主业务场景自动化测试

互联网金融P2P行业,近三年来发展迅速,如火如荼。 据不完全统计,全国有3000的企业。 “互联网”企业,几乎每天都会碰到一些奇奇怪怪的bug,作为在互联网企业工作的测试人员,风险和压力都巨大。那么我们如何降…

python用tkinter随机数猜数字大小

python用tkinter随机数猜数字大小 没事做,看到好多人用scratch做的猜大小的示例,也用python的tkinter搞一个猜大小的代码玩玩。 猜数字代码 from tkinter import * from random import randint# 定义确定按钮的点击事件 def hit(x,y):global s_Labprint(…