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.mzph.cn/news/729980.shtml

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

相关文章

智慧油气场站:油气行业实现数字化转型的关键一步

智慧油气场站:油气行业实现数字化转型的关键一步 在现代社会,能源供应是国家经济发展和人民生活的重要保障。而油气场站作为能源的重要供应和储存基地,扮演着至关重要的角色。此外,油气场站还可以为石油和天然气的生产提供支持。…

Docker安装主从数据库

我自己的主数据库名字 user_muster 密码是123456 从数据库 就是slave2 名字是root 密码是123456 首先开启docker后直接执行命令 docker run -d \ -p 3307:3306 \ -v /xk857/mysql/master/conf:/etc/mysql/conf.d \ -v /xk857/mysql/master/data:/var/lib/mysql \ -e MYSQL_…

【随笔】程序员的金三银四求职宝典,每个人都有最合适自己的求职宝典

大家好,我是全栈小5,欢迎阅读文章! 此篇是【话题达人】系列文章,这一次的话题是《程序员的金三银四求职宝典》 目录 背景能力流程图求职宝典就业数据人数曲线图增长率柱状图 其他建议文章推荐 背景 随着春天的脚步渐近&#xff0…

【JavaEE初阶】 关于JVM垃圾回收

文章目录 🍃前言🎋死亡对象的判断算法🚩引用计数算法🚩可达性分析算法 🌳垃圾回收算法🚩标记-清除算法🚩复制算法🚩标记-整理算法🚩分代算法🎈哪些对象会进入…

Redis与 Memcache区别

Redis与 Memcache区别 1 , Redis 和 Memcache 都是将数据存放在内存中,都是内存数据库。不过 Memcache 还可用于缓存 其他东西,例如图片、视频等等。 2 , Memcache 仅支持key-value结构的数据类型,Redis不仅仅支持简单的key-value类型的数据&…

STM32 | Proteus 8.6安装步骤(图文并茂)

01 Proteus 8.6 简介 Proteus 8.6 是一款功能强大的电子设计自动化软件,广泛用于电路设计、仿真和PCB布局。它为电子工程师和学生提供了一个全面的工具集,用于设计和验证各种电路和电子设备。Proteus 8.6 包括了以下几个主要特性: 1. 电路设…

力扣404. 左叶子之和(java)

//当前节点的左子树不为空 且是叶子节点 root.left ! null &&root.left.leftnull && root.left.rightnull/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* …

git分布式管理-头歌实验搭建Git服务器

一、Git服务器搭建 任务描述 虽然有提供托管代码服务的公共平台,但是对一部分开发团队来说,为了不泄露项目源代码、节省费用及为项目提供更好的安全保护,往往需要搭建私有Git服务器用做远程仓库。Git服务器为团队的开发者们,提供了…

洛谷 P8816 [CSP-J 2022] 上升点列(T4)

目录 题目传送门 算法解析 最终代码 提交结果 尾声 题目传送门 [CSP-J 2022] 上升点列 - 洛谷https://www.luogu.com.cn/problem/P8816 算法解析 k 0 且 xi, yi 值域不大时,这题是非常简单的 DP,类似「数字三角形」。 记 dp(x,y) 为「以 (x,y) …

tomcat基础介绍

目录 一、Tomcat的基本介绍 1、Tomcat是什么? 2、Tomcat的配置文件详解 3、Tomcat的构成组件 6、Tomcat的请求过程 一、Tomcat的基本介绍 1、Tomcat是什么? Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器…

植物病虫害:YOLO玉米病虫害识别数据集

玉米病虫害识别数据集:玉米枯萎病,玉米灰斑病,玉米锈病叶,粘虫幼虫,玉米条斑病,黄二化螟,黄二化螟幼虫7类,yolo标注完整,3900多张图像,全部原始数据&#xff…

二、TensorFlow结构分析(4)

TF数据流图图与TensorBoard会话张量Tensor变量OP高级API 目录 1、变量 2、高级API 1、变量 2、高级API

RFID技术进阶:频段选择的艺术与科学

RFID技术进阶:频段选择的艺术与科学 在数字化、自动化的浪潮中,RFID(无线射频识别)技术以其独特的优势,逐渐在多个领域占据了一席之地。RFID(Radio Frequency Identification),即无…

24/03/07总结

esayx: 贪吃蛇: #include "iostream" #include "cmath" #include "conio.h" #include "easyx.h" #include "time.h" #define NODE_WIDTH 40 using namespace std; typedef struct {int x;int y; }node; enum direction /…

C++ Lambda函数

lambda语法 [capture list] (parameter list) specifiers exception -> type { function body }[capture list]是捕获列表,在应用中必填。 (parameter list)是参数列表,在应用中选填。 specifiers是限定符,在应用中选填。 exception是…

Java对接腾讯云直播示例

首先是官网的文档地址 云直播 新手指南 可以发现它这个主要是按流量和功能收费的 价格总览 流量这里还只收下行的费用,就是只收观看消耗的流量费 其它的收费就是一些增值业务费 (包括直播转码、直播录制、直播截图、直播审核、智能鉴黄、实时监播、移动直…

【性能测试】Jmeter性能压测-阶梯式/波浪式场景总结(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、阶梯式场景&am…

学习JAVA的第十四天(基础)

目录 Collection集合 迭代器遍历 增强for遍历 Lambda表达式遍历 List集合 遍历 数据结构 栈 队列 数组 链表 前言: 学习JAVA的第十三天 Collection集合 Collection的遍历方式: 迭代器(不依赖索引)遍…

爱普生宣布开发出独特的宽幅度LVDS输出 —可灵活选择与LSI

爱普生宣布开发出独特的宽幅度LVDS输出 —可灵活选择与LSI -相匹配的低噪声输出 精工爱普生公司(TSE: 6724,“爱普生”)开发了一种新的晶体振荡器差分输出方案。新方案,宽幅低压差分信号(WA-LVDS),可以灵活选择最适合LSI所需的幅值水平的输出…

浅谈碳化硅MOSFET TO-247封装单管引入开尔文管脚必要性

相较于传统的硅MOSFET和硅IGBT 产品,基于宽禁带碳化硅材料设计的碳化硅 MOSFET 具有耐压高、导通电阻低,开关损耗小的特点,可降低器件损耗、减小产品尺寸,从而提升系统效率。而在实际应用中,我们发现:带辅助…