C/C++的内存管理与初阶模板

引言

我们在学习C++的时候,会经常在堆上申请空间,所以这个时候就体现了内存管理遍历。
图下是我们常见的计算机的内存划分:
我也在图下对部分变量存在的位置,及时标注。(如果有任何问题可以联系博主修改,感谢大家。)
在这里插入图片描述
那么看完这个内存分布图,我想给大家看到题:如果遮住答案,大家能答对吗?
这些题是我们在C语言中常见的存储方式。在图中我们可以看到我们使用了malloc()/free()在堆上进行开空间,所以内存管理中最重要的区域就是堆了
在这里插入图片描述

new/delete

new/delete的使用方法

在C语言的时候,我们用malloc()/free()对堆上的空间进行开辟和释放,但是在C++我们使用new/和delete来进行堆的空间开辟和释放
可能有些小伙伴会很奇怪为什么new会返回一个指针,new的底层还是malloc,所以返回的还是指针。那我们为什么直接用malloc,还会创造一个new呢?大家可以从下图看出new其实很方便使用,不需要判断(后期会说到抛异常),还不需要计算开辟空间大小
在这里插入图片描述

new的初始化

如图,p3是我们开辟了一个int空间初始化成了10,p4开辟了10个空间初始化12345。
在这里插入图片描述

new/delete的特点

在这里插入图片描述
注::在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。

operator new与operator delete函数

new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。(如下图)

在这里插入图片描述

operator new[]会多开空间情况

为什么operator new[]会多开空间呢?那是因为当我们定义的时候,编译器知道我们要开多大的空间,但是当我们析构空间的时候,编译器并不知道我们要析构多少,所以多开的空间是为了存放记录个数
在这里插入图片描述

初阶模板

函数模板

在这里插入图片描述
编译器会根据函数模板生成不同类型的函数。那如果我同时存在当前函数和函数模板,编译器会怎样选择?
有现成合适的函数,编译器会优先去调用合适的,没有合适的去调用函数模板生成匹配的。

模板实例化是提前规定好了函数模板的类型,。在这里插入图片描述

类模板

从下图可以看出,类模板和typedef有一点像,但是typedef其实是没有类模板好用的。
在这里插入图片描述
原因:
我们曾经写过栈的实现,那么如果我现在有一个项目需要两个不同类型的栈被创建出来,typedef就不能够满足我们的需求了,这个时候类模板会比typedef好用很多
在这里插入图片描述

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

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

相关文章

VSCode搭建ARM开发环境

为了构建Cortex M系列单片机免费开源的开发环境,网络上了解来看VSCODEGCCJLINK是一套比较高效的组合方式,下面记录环境搭建的流程。 我这边的PC环境为 WIN7专业版64bit。 需要用到的工具 Visual Studio CodeSTM32CubemxARM GCC 交叉编译工具链&#x…

容器安全是什么?

容器安全定义 容器安全是指保护容器的完整性。这包括从其保管的应用到其所依赖的基础架构等全部内容。容器安全需要完整且持续。通常而言,企业拥有持续的容器安全涵盖两方面: 保护容器流水线和应用保护容器部署环境和基础架构 如何将安全内置于容器流…

C/C++游戏逆向

初级 %p、size_t、%zd、%llu、sizeof %p用于输出地址,HWND类型的也可以使用%p输出size_t:C语言源代码:typedef unsigned __int64 size_t;sizeof 返回值是 size_t类型,打印的时候不能使用%d,应该使用%zu 修改窗口标题…

API可视化编排,提高API可复用率

在数字化时代,API(应用程序编程接口)已成为不同软件应用之间沟通的桥梁。然而,如何高效管理、编排和复用这些API,成为了企业和开发者面临的重要挑战。随着技术的不断进步,RestCloud API可视化编排应运而生&…

【YOLO v5 v7 v8 v9小目标改进】AFPN 渐进式特征金字塔网络:解决多尺度特征融合中,信息在传递过程丢失

AFPN 渐进式特征金字塔网络:解决多尺度特征融合中,信息在传递过程丢失 提出背景AFPN 多尺度特征金字塔 非邻近层次的直接特征融合 自适应空间融合操作 小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改YOLO v9 魔改 提出背景 论文:https:…

吴恩达deeplearning.ai:数据增强数据合成迁移学习

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 让我们看看为你的程序添加数据的技巧。在构建神经网络的时候,我们总是想要更多的数据,但是获取更多的数据往往是十分昂贵又缓慢的。相反地,添加数据的另一…

现在做抖店还能行吗?给2024年想入局抖店的新手,一些建议

我是王路飞。 说起来抖店好像也不算是个新项目了,毕竟抖音小店正式上线时间是在2019年,到现在也有5年多时间了。 我这边是从20年开始入局抖店的,比较庆幸的是赶上了当初的流量风口,且一直坚持到了现在。 由刚开始的单人单店&am…

手写分布式配置中心(六)整合springboot(自动刷新)

对于springboot配置自动刷新,原理也很简单,就是在启动过程中用一个BeanPostProcessor去收集需要自动刷新的字段,然后在springboot启动后开启轮询任务即可。 不过需要对之前的代码再次做修改,因为springboot的配置注入value("…

Unity 给刚体一个力或速度

创建平面和小球,给力或给速度让其弹起 给小球挂载刚体(Rigibdody)和脚本 (力是累计或者衰减的,直接给速度就是赋值,但如果速度就和力类似了) using System.Collections; using System.Collect…

数据库(mysql)-新手笔记(主外键,视图)

主外键 主键(唯一性,非空性) 主键是数据库表中的一个或多个字段,其值唯一标识表中的每一行/记录。 唯一性: 主键字段中的每个值都必须是唯一的,不能有两个或更多的记录具有相同的主键值 非空性:主键字段不能包含NULL值。 外键(引用完整 …

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Marquee)

跑马灯组件,用于滚动展示一段单行文本。仅当文本内容宽度超过跑马灯组件宽度时滚动,不超过时不滚动。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Ma…

Python笔记|基础算数运算+数字类型(1)

重新整理记录一下python的基础知识 基础运算符 、-、*、/ ;括号 ()用来分组。 >>>2 2 4 >>>50 - 5*6 20 >>>(50 - 5*6) / 4 5.0 >>>8 / 5 1.6向下取整除法:向下舍入到最接近的整数的数学除法。运算符是 //。比如1…