malloc返回的是什么_malloc返回的是什么指针

malloc返回的是什么_malloc返回的是什么指针new和malloc的区别与联系我们都知道new和malloc都可以用来申请空间,但为什么有了malloc/free为什么还要new/delete?如果new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?这些将是我接下来要讨论的问题。。。

new和malloc的区别与联系
  malloc返回的是什么_malloc返回的是什么指针

  我们都知道new和malloc都可以用来申请空间,但为什么有了malloc/free为什么还要new/delete?如果new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?这些将是我接下来要讨论的问题。。。malloc返回的是什么_malloc返回的是什么指针

  首先,我们先来了解一下new和malloc之间的区别:

  属性方面

  new/delete作为C++关键字,需要编译器支持。malloc/free属于库函数,需要头文件(stdlib.h)支持。

  参数方面

  new申请内存无需指定内存大小,编译器会根据类型信息自行计算。除此之外,new会调用构造函数。

  malloc必须由我们计算需要申请的字节数,需要指出所需内存的尺寸,并且返回后强行转换为实际类型的指针。而且malloc只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值是随机的。malloc返回的是什么_malloc返回的是什么指针通过new申请空间malloc返回的是什么_malloc返回的是什么指针通过malloc申请空间

  返回类型

  new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。malloc返回的是什么_malloc返回的是什么指针new返回的是对象类型的指针malloc返回的是什么_malloc返回的是什么指针malloc返回void *

  分配失败方面

  new内存分配失败的时候,抛出bad_ alloc异常 ;malloc分配内存失败时返回NULL。

  自定义类型

  new会先调用operator new函数,申请足够的内存(通常底层使用malloc实现).然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,然后调用operator delete函数释放内存(通常底层使用free实现)。

  malloc/free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构工作。

  重载

  C++允许重载new/delete操作符,而malloc是库函数不允许重载。

  内存区域方面

  new在自由储存区分配内存,malloc在堆上分配内存。

  自由存储区(free store)是C++中通过new和delete动态分配和释放对象的抽象概念(逻辑概念),通过new来申请的内存区域可称为自由存储区,通过delete归还内存。

  堆是操作系统所维护的一块特殊内存,是一个物理概念,它提供了动态分配的功能,当运行程序调用malloc()时就会从中分配,调用free()归还内存。

  效率方面

  对于new和delete,对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。所以说new的效率高于malloc。malloc返回的是什么_malloc返回的是什么指针

  最后我们再来解决一下开头提到的问题:

  有了malloc/free为什么还要new/delete?

  因为C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete,讲究一个效率。对于内部数据类型的“对象”没有构造与析构的过程,对它们而言malloc/free和new/delete是等价的。但对于非内部数据类型(需要用户自己定义),new和malloc的区别就显而易见。

  既然new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?

  C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。

  如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如果用delete释放“malloc申请的动态内存”,结果也会导致程序出错。所以new/delete必须配对使用,malloc/free也一样。malloc返回的是什么_malloc返回的是什么指针free释放new创建的动态对象malloc返回的是什么_malloc返回的是什么指针

激活谷谷主为您准备了激活教程,为节约您的时间请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/93934.html

(0)
上一篇 2024年 5月 27日 下午2:42
下一篇 2024年 5月 27日

相关推荐

  • typora什么软件能做ppt吗_typora好用吗

    typora什么软件能做ppt吗_typora好用吗你写论文时发现了哪些非常神的网站?文理科皆可,本硕博不限,专业不限。只要给你写论文带来便利的,能给人相见恨晚之感的都可以说说。(违法乱纪的不要说。)罗列一下我会常用的工具箱:1. 谷歌学术:https://scholar.google.com.hk/?hl=zh-C

    激活谷笔记 2024年 5月 10日
  • faculty怎么用_faculty包括学生吗

    faculty怎么用_faculty包括学生吗faculty工作faculty的意思A:How may I help you?我能帮你做点什么?B:I’m looking for a job.我正在找工作。faculty的解释A:What kind of job are you looking for?你要找哪种类型的工

    激活谷笔记 2024年 5月 14日
  • elsa总线_eisa总线

    elsa总线_eisa总线eisa是什么意思 eisa的翻译、中文解释1. 含义:EISA是英文单词”Extended Industry Standard Architecture”的缩写,意为扩展行业标准体系结构。例句:– EISA是一

    2024年 5月 29日
  • sputter翻译_sputter翻译中文

    sputter翻译_sputter翻译中文sputter是什么意思_sputter用英语怎么说_sputter的翻译_sputter翻译成_sputter的中文意思_sputter怎么读,sputter的读音,sputter的用法,sputter的例句全部劈啪声唾沫飞溅sputtering fireworks噼啪作响的烟火牛津词典‘W-

    激活谷笔记 2024年 5月 24日
  • 反相输入积分运算电路的实验结论怎么写_反相输入积分运算电路的实验结论怎么写

    反相输入积分运算电路的实验结论怎么写_反相输入积分运算电路的实验结论怎么写差分放大电路的作用主要是通过什么来实现?主要是以下几个方面:1、BJT 差分放大电路设计1)差分放大电路图2)差分运算原理2、运算放大器设计差分电路1)差分运算放大电路2)差分运算放大器公式3)差分运算放大器实际电路一

    2024年 5月 26日
  • nginx 配置详解docker_docker nginx 权限

    nginx 配置详解docker_docker nginx 权限2024年黑马程序员Java学习路线图在过去的一年里,为了帮助更多人线上充电,学会更多技能,黑马程序员举办了 150+ 场免费直播公开课,新增精品视频教程 80+ 套,包含 10 余门互联网高薪学科。据统计,我

    2024年 5月 13日
  • linux命令vim

    linux命令vim专注于Java领域优质技术,欢迎关注作者:vimtutor 来自:Vim教程网Vim的很多命令和功能与Linux系统的命令和功能及其相似,可以说是一脉相承。Vim教程网(https://vimjc.com)总结了10条Linux下提高效率的小技巧,并与Vim对应命令进行对比。(1) &lt

    激活谷笔记 2024年 5月 19日
  • idea2017注册码

    idea2017注册码1)idea的注册使用码在idea注册界面选择license server 选项 ,然后在license server address 填写框中加入http://idea.iteblog.com/key.php即可使用2)idea基本配置打开项目 :可以分为

    激活谷笔记 2024年 5月 19日
  • htmlform表单属性_html from表单

    htmlform表单属性_html from表单HTML <form> method 属性明确传递参数前面的一些建议也可以作为选择此种方式的一定解释。假设你有一个很简单的表单,其中只包含 x 和 y 这两个参数。在对这些元素的值进行编码时,它们的形式如下所示:x=28&y=66如果表单采用

    激活谷笔记 2024年 5月 23日
  • word文档怎么删除空白页_word文档怎么转换成ppt

    word文档怎么删除空白页_word文档怎么转换成pptWord文档空白页无法删除?这几种方法教你快速解决!当你在Word中写完了毕业论文后调整格式时,或在处理其他文档时,是否会遇到空白页无法删除的情况呢?大部分情况下这是因为空白页中出现了隐藏的分节符,无法直接用“backspace”退格键删除导致的。那应该如何解

    2024年 5月 14日
  • 如何查看linux操作系统版本号码

    如何查看linux操作系统版本号码CentOS7.3学习笔记总结(三十六)-怎么查看Linux系统版本信息我们在使用linux系统版本中,一般只关心linux的系统版本和内核版本。Linux内核版本查看方法一:命令:cat /proc/versionLinux version 3.10.0-514.el7.

    激活谷笔记 2024年 5月 19日
  • 哈夫曼树及哈夫曼编码实验报告_哈夫曼树和哈夫曼编码实验报告

    哈夫曼树及哈夫曼编码实验报告_哈夫曼树和哈夫曼编码实验报告20192312吴欣欣 哈夫曼编码实践 实验报告20192312 2020-2021-1 实验七 《查找与排序》实验报告课程:《程序设计与数据结构》班级: 1923姓名: 吴欣欣学号:20192312实验

    2024年 5月 22日
关注微信