gpt4 book ai didi

c++ - 增加进程的内存使用

转载 作者:行者123 更新时间:2023-11-30 02:03:50 26 4
gpt4 key购买 nike

我有一个在 Solaris 中运行的 C++ 进程,它创建了 3 个线程来执行一些任务。这些线程在循环中执行,只要进程在运行,它就会运行。

但是,我看到进程的内存使用量不断增长,一旦内存使用量超过 4GB,进程核心就会转储。

谁能给我一些关于内存使用增长背后的问题的建议?如何防止进程因为内存耗尽而进行核心转储?

线程重启会有帮助吗?

欢迎任何指点。

最佳答案

不,重新启动线程没有帮助。

您的应用程序似乎存在内存泄漏。

根据我的经验,有两种类型的内存泄漏:

  • 应用程序退出时您可以看到的真实内存泄漏
  • 'false' 内存泄漏,就像一个在应用程序生命周期中增加但在最后被正确清理的大列表

对于第一种类型,有一些工具可以在应用程序退出时报告尚未被释放的内存。我不知道 Solaris,但 Windows 下有许多工具可以做到这一点。对于 Unix,我认为 Valgrind 可以做到这一点。

对于第二种,Windows下也有一些工具可以对你的应用程序的内存进行快照。只需以几分钟或几小时的间隔(取决于您的应用程序)拍摄两张快照,然后让它们通过工具进行比较。 Solaris 上可能有类似的工具。

使用这些工具可能需要您的应用程序占用更多内存,因为该工具需要存储每个内存分配的调用堆栈。因此,它的运行速度也会慢得多。但是,您只有在积极使用此工具时才会看到此效果,因此在实际生产代码中没有任何效果。

所以,就在Solaris下寻找这类工具吧。我很快用谷歌搜索并找到了这个链接:http://prefetch.net/blog/index.php/2006/02/19/finding-memory-leaks-on-solaris-systems/ .这可能是一个起点。

编辑:一些附加信息:您正在寻找正确的内存类型吗?即使你总共只分配了 3GB,由于内存碎片,总的虚拟地址空间仍然可能达到 4GB。不幸的是,您对此无能为力(除了使用另一种内存分配策略)。

关于c++ - 增加进程的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11356652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com