【问题标题】:Is there any way to know how much mem is used by a thread?有没有办法知道线程使用了多少内存?
【发布时间】:2011-07-31 08:02:21
【问题描述】:

我正在维护一个程序,启动时使用600+MB内存,什么都不做!

我想知道每个线程使用了多少内存,gdb 可以做这个工作吗?

【问题讨论】:

  • 第一个问题是:你怎么知道它在使用600MB?你可能看错了。
  • 线程共享全局堆空间。线程的唯一本地数据是它的堆栈和线程局部变量。

标签: c++ linux multithreading memory gdb


【解决方案1】:

我认为您可能需要像 IBM/Rational Purify 或 valgrind 这样的内存分析工具。

另外,如果您的程序在启动时使用 600Mb,您应该首先检查您的依赖库在加载后在做什么。你可能还没有输入main(),但他们可能正在创建一些重量级的全局静态对象,这些对象甚至在事情开始之前就被初始化了。

要记住的另一件事是,每个线程都会为其堆栈分配大量内存。每个线程可能是 1 MB 或更多,所以如果您自己创建 600 个线程,那么已经有 600Mb 消失了。

【讨论】:

    【解决方案2】:

    valgrind --tool=massif 是正确的解决方案。它将为您提供所有信息,哪个线程在什么时间点使用了多少内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-11
      • 2016-07-07
      • 2020-09-08
      • 2019-03-13
      • 2019-03-21
      • 2020-06-14
      • 1970-01-01
      • 2013-05-21
      相关资源
      最近更新 更多