首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存释放

内存释放
EN

Stack Overflow用户
提问于 2010-03-03 16:00:07
回答 6查看 305关注 0票数 0

另外,还要感谢丹尼尔·纽比回答了我的内存使用问题( Martin对此做了更多的解释)。这绝对是我一直在寻找的答案,但更多的其他问题被其他人回答了。

谢谢大家

澄清了我所有的顾虑。很高兴看到事情的运行方式,我希望他们运行。

我遇到了一些我不太确定的事情。

在我的程序中,我不使用malloc()free()__。我正在使用destructor创建类的实例--我确保每个类都运行--当它是 delete'd,时,它们都是--但是,没有free()调用,甚至没有将它们的指针(指向全局范围内的事物或其他类)设置为NULL0__。

我所说的“我已经确定了”,并不是我把每个析构函数都称为析构函数。我只使用delete来调用析构函数来运行,但是每次创建对象时都会增加一个变量,每次运行析构函数时都会增加一个变量。这就是我如何确保创建的对象数量等于调用.的析构函数的数量。

我应该使用malloc()free()吗?我应该是NULL__ing指向我仍然想存在的东西的指针吗?

第二个问题是,当我查看任务管理器时,为什么我的过程从不“丢弃”内存?它过去从来没有停止增长,然后我启动了deleting一切正常。或者我是这样想的。

free()delete不会降低内存使用量吗?

关于链接列表的malloc_‘ing和free_’ing内存,我应该进行哪些实践?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-03 16:04:29

很少有理由在malloc()free()程序中使用C++。坚持newdelete。注意,与垃圾收集语言不同,在C++中将指针设置为NULL或0与释放内存无关。

票数 2
EN

Stack Overflow用户

发布于 2010-03-03 16:01:50

您应该在new中使用delete,在malloc中使用freedelete将调用类的析构函数,因此不必显式调用它。析构函数的目的是释放类可能拥有的资源,delete也会释放内存。

唯一需要解释使用析构函数的时间是通过 安置新初始化对象时。您应该把自己放在编译器生成的代码释放资源的位置上--阅读本文中关于C++成语:资源获取是初始化的文章。

此外,将类的指针设置为null也不做任何事情,后台没有垃圾收集器来清理内存。如果您没有在C++中释放动态内存,它将被“泄漏”内存--也就是说,没有到内存的链接,并且在进程退出之前它永远不会被回收。

再次不要混合内存分配函数的对。

edt:不实现链接列表,使用标准模板库提供的容器。如果您觉得需要更好的性能,请使用boost中的侵入容器

票数 2
EN

Stack Overflow用户

发布于 2010-03-03 16:08:58

您应该优先使用new和delete,而不是malloc()、/calloc()、/realloc()和free()。

如果要创建链接列表,也应该使用std:名单。,请查看std::向量

至于应用程序的内存使用情况:很可能在应用程序退出之前,内存不会返回到系统。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2372780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档