打印

关于new和malloc

[复制链接]
1503|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
火箭球迷|  楼主 | 2013-11-27 18:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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出来的。

使用特权

评论回复
5
vivilzb1985| | 2013-12-10 23:36 | 只看该作者
秋天落叶 发表于 2013-11-27 18:43
new封装了malloc,默认情况下,他会自动调用所有相关的构造函数(本身、基类、成员等),还会抛出相应的异 ...

这个我跟着了解下的,谢谢介绍的

使用特权

评论回复
6
comeon201208| | 2013-12-16 23:41 | 只看该作者
pkat 发表于 2013-11-27 18:39
两者的区别 google下很多的很全的!
free释放后,指针指向的内存释放掉了,不是指针本身哦!
如果没有置空 ...

我也了解下这个知识的,谢谢介绍啊

使用特权

评论回复
7
dfsa| | 2013-12-26 18:51 | 只看该作者
这个谷歌应该能找到

使用特权

评论回复
8
火箭球迷|  楼主 | 2013-12-26 19:00 | 只看该作者
已经弄清楚了,多谢LS各位

使用特权

评论回复
9
comeon201208| | 2014-1-21 23:35 | 只看该作者
pkat 发表于 2013-11-27 18:39
两者的区别 google下很多的很全的!
free释放后,指针指向的内存释放掉了,不是指针本身哦!
如果没有置空 ...

楼上解释的很好的额,我参考的啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

150

主题

3470

帖子

3

粉丝