查看: 4919|回复: 6

new和malloc的区别

[复制链接]

该用户从未签到

发表于 2008-6-8 22:04:48 | 显示全部楼层 |阅读模式
分享到:
1、new 是c++中的操作符,malloc是c 中的一个函数
2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数
3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。
4、new 和 malloc效率比较
new 有三个字母, malloc有六个字母
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不是库函数。
我们先看一看malloc/free和new/delete如何实现对象的动态内存管理,见示例。

class Obj
{
public :

          Obj(void){ cout
回复

使用道具 举报

该用户从未签到

发表于 2008-6-9 22:01:38 | 显示全部楼层

RE:new和malloc的区别

学学了
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2008-6-10 11:30:36 | 显示全部楼层

RE:new和malloc的区别

呵呵,谢谢你的分享
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2008-6-12 13:54:59 | 显示全部楼层

RE:new和malloc的区别

我一直回避程序的内存管理,因为爱之愈深,恨之愈烈。但是,还是由很多的朋友一直在体这方面的问题,所以就索性把它坦白了,也许对你我都是一件好事情。
首先,需要搞清楚:变量的类型和它的存储类别是两个概念。
数据类型和内存管理没有直接的关系。
一个由c/C++编译的程序占用的内存分为以下几个部分:
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。   程序结束后由系统释放。
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2008-6-13 23:29:35 | 显示全部楼层

RE:new和malloc的区别

呵呵,谢谢你的分享啊
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2008-6-17 20:54:08 | 显示全部楼层

RE:new和malloc的区别

学好C语言和C++是编程的关键
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2008-6-24 13:08:14 | 显示全部楼层

RE:new和malloc的区别

学好C语言用处多多呀
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-15 23:05 , Processed in 0.176757 second(s), 27 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.