1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 3,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。4,C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。

5、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。

一:new delete 是运算符,malloc,free是函数

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。

对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。

因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

new的对象在堆里面,而malloc的对象在自由存储区里面。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。

转载于:https://blog.51cto.com/xiaoxieboke/1301719

malloc和new的区别是什么?相关推荐

  1. 如何实现一个malloc

    http://blog.codinglabs.org/articles/a-malloc-tutorial.html 任何一个用过或学过C的人对malloc都不会陌生.大家都知道malloc可以分配一 ...

  2. malloc基本实现

    转自:http://www.cnblogs.com/wangshide/p/3932539.html 任何一个用过或学过C的人对malloc都不会陌生.大家都知道malloc可以分配一段连续的内存空间 ...

  3. 详解malloc,calloc,realloc原理及其模拟实现

    malloc原理 malloc它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足 用户请求所需要的内存块.然后,将该内存块一分为二(一块的 ...

  4. c++ 使用未初始化的内存_C语言内存分布(内核区、堆栈区等)

    C语言内存分布(内核.变量,堆栈等) 内核区是提供给操作系统使用的.栈区是给局部变量使用的,局部变量是函数内定义的变量,包括函数系数:程序调用时把局部变量存的数据压入栈,程序退出时把局部变量存的数据弹 ...

  5. 嵌入式c语言如何在堆区开辟空间

    堆区是动态内存分配的一个重要区域,在C语言中可以使用malloc()函数在堆区开辟空间.malloc()函数的语法如下: void *malloc(size_t size); 其中,size是您需要开 ...

  6. C语言——malloc与free

    文章目录 1. malloc 1.1 size_t 1.2 malloc可申请的字节数 1.2.1 整形常量溢出 1.3 malloc一维数组 1.4 calloc 2. free 1. malloc ...

  7. C++ 堆区,栈区,数据段,bss段,代码区(详解)

    各段的介绍 一般情况下,一个可执行C程序在内存中主要包含5个区域,分别是代码段(text),数据段(data),BSS段,堆段(heap)和栈段(stack).其中前三个段(text,data,bss ...

  8. c语言malloc函数程序,c语言 malloc函数详解

    谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道. 1.关于malloc相关的几个函数 关于malloc我们进入Linux man一下就会得到如下结果: ...

  9. malloc函数实现原理!

    任何一个用过或学过C的人对malloc都不会陌生.大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉.但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至 ...

最新文章

  1. DeepMind的蛋白质折叠AI解决了50年来的生物学重大挑战
  2. MongoDB 杭州用户会全记录(千寻位置、妈妈帮、阿里云专家等精彩分享)
  3. 动态规划走楼梯_负重爬楼梯、过草地,服贸会六足机械人展示“送水到家”
  4. 解决UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(12
  5. 项目开发管理工具---GitHub(一)
  6. 静态时序分析——多周期、半周期和伪路径
  7. 数学课本上的几大变态
  8. CentOS 配置mysql允许远程登录
  9. java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端...
  10. j2me模拟器java游戏存档修改,J2me模拟器
  11. 联想y7000p安全锁孔怎么用_Y7000P-个人使用感受_拯救者笔记本-联想社区
  12. html5 斗鱼 苹果,斗鱼ios端——手游直播开播指导
  13. Js逆向教程-09常见的加密方式
  14. PVAJP计划:暨关于.Press全站使用VUE-AJAX-JSON-PYTHON的新规划
  15. 浅谈混频器之镜像频率
  16. 2021年如何选购华强北AirPods(一次翻车到下车的经历总结的经验)
  17. 元宇宙NFT最近最火的项目,该如何选择平台呢
  18. 基于JavaEE的智能化网吧服务系统的设计与实现毕业设计论文
  19. 微软翻译与服务器断开,一水的机翻?微软中文翻译也闹笑话了
  20. 凡客之困:物流和信誉在缩水

热门文章

  1. 聊聊webflux参数校验
  2. anime.js 实战:实现一个带有描边动画效果的复选框...
  3. C++:位操作基础篇之位操作全面总结
  4. 自定义SearchView的搜索提示
  5. 当当架构部张亮:从码农到大牛,技术与心境的双重提升
  6. git 挽救忘记提交到哪个分支的代码
  7. 细数C++和C的差别
  8. 工作中关于rpm的一个简单但头疼的问题
  9. Mongodb python驱动教程
  10. Oracle procedure调用实例