malloc和new的区别是什么?
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的区别是什么?相关推荐
- 如何实现一个malloc
http://blog.codinglabs.org/articles/a-malloc-tutorial.html 任何一个用过或学过C的人对malloc都不会陌生.大家都知道malloc可以分配一 ...
- malloc基本实现
转自:http://www.cnblogs.com/wangshide/p/3932539.html 任何一个用过或学过C的人对malloc都不会陌生.大家都知道malloc可以分配一段连续的内存空间 ...
- 详解malloc,calloc,realloc原理及其模拟实现
malloc原理 malloc它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足 用户请求所需要的内存块.然后,将该内存块一分为二(一块的 ...
- c++ 使用未初始化的内存_C语言内存分布(内核区、堆栈区等)
C语言内存分布(内核.变量,堆栈等) 内核区是提供给操作系统使用的.栈区是给局部变量使用的,局部变量是函数内定义的变量,包括函数系数:程序调用时把局部变量存的数据压入栈,程序退出时把局部变量存的数据弹 ...
- 嵌入式c语言如何在堆区开辟空间
堆区是动态内存分配的一个重要区域,在C语言中可以使用malloc()函数在堆区开辟空间.malloc()函数的语法如下: void *malloc(size_t size); 其中,size是您需要开 ...
- 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 ...
- C++ 堆区,栈区,数据段,bss段,代码区(详解)
各段的介绍 一般情况下,一个可执行C程序在内存中主要包含5个区域,分别是代码段(text),数据段(data),BSS段,堆段(heap)和栈段(stack).其中前三个段(text,data,bss ...
- c语言malloc函数程序,c语言 malloc函数详解
谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道. 1.关于malloc相关的几个函数 关于malloc我们进入Linux man一下就会得到如下结果: ...
- malloc函数实现原理!
任何一个用过或学过C的人对malloc都不会陌生.大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉.但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至 ...
最新文章
- DeepMind的蛋白质折叠AI解决了50年来的生物学重大挑战
- MongoDB 杭州用户会全记录(千寻位置、妈妈帮、阿里云专家等精彩分享)
- 动态规划走楼梯_负重爬楼梯、过草地,服贸会六足机械人展示“送水到家”
- 解决UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(12
- 项目开发管理工具---GitHub(一)
- 静态时序分析——多周期、半周期和伪路径
- 数学课本上的几大变态
- CentOS 配置mysql允许远程登录
- java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端...
- j2me模拟器java游戏存档修改,J2me模拟器
- 联想y7000p安全锁孔怎么用_Y7000P-个人使用感受_拯救者笔记本-联想社区
- html5 斗鱼 苹果,斗鱼ios端——手游直播开播指导
- Js逆向教程-09常见的加密方式
- PVAJP计划:暨关于.Press全站使用VUE-AJAX-JSON-PYTHON的新规划
- 浅谈混频器之镜像频率
- 2021年如何选购华强北AirPods(一次翻车到下车的经历总结的经验)
- 元宇宙NFT最近最火的项目,该如何选择平台呢
- 基于JavaEE的智能化网吧服务系统的设计与实现毕业设计论文
- 微软翻译与服务器断开,一水的机翻?微软中文翻译也闹笑话了
- 凡客之困:物流和信誉在缩水