我有一个 C++ 程序,在执行期间,它会分配大约 3-8Gb 的内存来存储哈希表(我使用 tr1/unordered_map)和各种其他数据结构。
但是,在执行结束时,在返回 shell 之前会有很长的停顿。
例如,在我的主要功能的最后
std::cout << "End of execution" << endl;
但是我的程序的执行会是这样的
$ ./program
do stuff...
End of execution
[long pause of maybe 2 min]
$ -- returns to shell
这是预期的行为还是我做错了什么?
我猜程序最后会释放内存。但是,使用大量内存的商业应用程序(例如 Photoshop)在您关闭应用程序时不会出现这种暂停。
请指教:)
编辑:最大的数据结构是一个 unordered_map
,以 string
为键,并存储 integers
的 list
.
我在 linux 上使用 g++ -O2
,我使用的计算机有 128GB 内存(其中大部分是免费的)。有几个巨大的物体
解决方案:我最终摆脱了哈希表,因为它几乎已满。这解决了我的问题。
最佳答案
如果程序完成时数据结构足够复杂,释放它们实际上可能需要很长时间。
如果您的程序确实必须创建如此复杂的结构(进行一些内存分析以确保),那么可能没有干净的方法。
您可以通过肮脏的黑客攻击来捷径释放内存 - 至少在那些进程终止时自动释放进程分配的所有内存的操作系统上.
您可以通过直接调用 libc 的 exit(3)
函数或操作系统的 _exit(2)
来实现。但是,我会非常小心验证这不会使某些 C++ 析构函数代码可能正在执行的任何其他(重要)清理工作短路。而这做什么或不做什么是高度依赖于系统的(操作系统、编译器、libc、您使用的 API,...)。
关于c++ - 释放内存需要时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572409/