关于new和malloc

[复制链接]
1880|8
 楼主| 火箭球迷 发表于 2013-11-27 18:21 | 显示全部楼层 |阅读模式
new/delet和malloc/free底层如何实现的?free两次系统会报错,系统是如何感知到free两次的
pkat 发表于 2013-11-27 18:39 | 显示全部楼层
两者的区别 google下很多的很全的!
free释放后,指针指向的内存释放掉了,不是指针本身哦!
如果没有置空的话,指向的已经不再是堆上的内存地址了!再次释放就出错了!
至于底层实现,可以找源码瞧瞧!每次free都是有停止的标志量的!
秋天落叶 发表于 2013-11-27 18:43 | 显示全部楼层
new封装了malloc,默认情况下,他会自动调用所有相关的构造函数(本身、基类、成员等),还会抛出相应的异常。当然你这些功能全部关掉后就和malloc一样了。malloc仅仅是分配内存而已,成员的初始化,基类的构造函数都不会进行。
baidudz 发表于 2013-11-27 18:53 | 显示全部楼层
底层,看你要深入到什么程度。

如果我们看语法层次,new是个操作符,malloc只是个函数。

如果讲具体的行为,new还负责调用构造函数,malloc则只是分配内存。

深入到CRT,一般来说,new都是用malloc间接实现的,当然了,有些C++的new的实现还不止malloc的那么多。

要是涉及到内存分配的细节,可以参考STL的Allocator,不是一会儿事儿,但是有参考意义。

想知道细节,看gcc源码什么的吧?我是没看过,我都是Google出来的。
vivilzb1985 发表于 2013-12-10 23:36 | 显示全部楼层
秋天落叶 发表于 2013-11-27 18:43
new封装了malloc,默认情况下,他会自动调用所有相关的构造函数(本身、基类、成员等),还会抛出相应的异 ...

这个我跟着了解下的,谢谢介绍的
comeon201208 发表于 2013-12-16 23:41 | 显示全部楼层
pkat 发表于 2013-11-27 18:39
两者的区别 google下很多的很全的!
free释放后,指针指向的内存释放掉了,不是指针本身哦!
如果没有置空 ...

我也了解下这个知识的,谢谢介绍啊
dfsa 发表于 2013-12-26 18:51 | 显示全部楼层
这个谷歌应该能找到
 楼主| 火箭球迷 发表于 2013-12-26 19:00 | 显示全部楼层
已经弄清楚了,多谢LS各位
comeon201208 发表于 2014-1-21 23:35 | 显示全部楼层
pkat 发表于 2013-11-27 18:39
两者的区别 google下很多的很全的!
free释放后,指针指向的内存释放掉了,不是指针本身哦!
如果没有置空 ...

楼上解释的很好的额,我参考的啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:姚明的铁杆球迷

150

主题

3470

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部