【发布时间】:2011-01-23 06:53:06
【问题描述】:
另外感谢 Daniel Newby 回答我的内存使用问题(以及 Martin York 的更多解释)。这绝对是我一直在寻找的答案,但我的其他问题更多是由其他人回答的。
谢谢大家
为了解决我所有的疑虑。很高兴看到事情按照我的预期运行。
我遇到了一些我不确定的事情。
在我的程序中,我没有使用malloc() 或free()。我正在使用new 和创建我的类的实例,并且我确保每个运行它的destructor 当它是delete'd,但是,没有free() 调用或甚至将它们的指针(指向全局范围内的事物或其他类)设置为 NULL 或 0。
我所说的“我已经确定”并不是我调用每个析构函数。我只使用delete来调用析构函数来运行,但是每次创建对象时变量都会增加1,并且每次运行析构函数时都会增加1。这就是我确保创建的对象数量等于调用的析构函数数量的方法。
我应该使用malloc() 和free() 吗?我应该NULLing 指向我仍然想存在的东西吗?
第二个问题是,为什么当我查看我的任务管理器时,我的进程永远不会“丢弃”内存?它曾经永远不会停止获得,然后我开始deleting一切正常。或者我是这么想的。
free() 或 delete 不会降低内存使用率吗?
我应该对malloc'ing 和free'ing 使用链表的内存进行哪些实践?
【问题讨论】:
-
“我已经确保每个都运行它的析构函数”是什么意思。你不是在调用析构函数吗?
-
不,我刚刚在它的析构函数中添加了一个增量,以便看到每个被创建的函数也会在删除时调用其析构函数。
-
这句话吓到我了:
我已经确保每个人在删除时都运行它的析构函数
你能解释一下你在做什么吗? -
在大多数操作系统上。应用程序永远不会将内存释放回操作系统(直到它退出)。因此,如果您使用某些操作系统工具来检查内存,它看起来永远不会崩溃。在内部,您的应用程序会跟踪释放的内存,以便下一个 malloc/new 重新使用它,从而减少应用程序从操作系统请求的内存量。
-
例如,当我关闭和打开新标签页时,firefox 的内存会上下波动。即使我清除所有数据,Photoshop 也不会减少。因此,在 Windows 上运行的程序似乎可以减少内存使用量。
标签: c++ memory-management pointers