2011-04-07 68 views
1

我正在维护一个程序,它在启动时使用600 + MB内存,什么都不做!有什么办法可以知道线程使用了多少内存?

我想知道有多少MEM由每个线程使用,可以用gdb做这项工作?

+0

第一个问题是:你怎么知道它是使用600MB?你可能在看错误的东西。 – 2011-04-07 03:34:27

+3

线程共享全局堆空间。一个线程的唯一本地数据是它的堆栈和线程局部变量。 – 2011-04-07 04:42:45

回答

2

valgrind --tool=massif是正确的解决方案。它会给你所有关于哪个线程在什么时间点使用多少内存的信息。

2

我认为像IBM/Rational Purifyvalgrind内存分析工具可能是你所需要的。

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

另一件事要记住的是,每个线程会得到很多的分配给它一个它堆栈存储器。它可能是一个兆字节或更多的线程,所以如果你自己创建600个线程,那么600Mb已经消失了。

+0

是的,它确实是由依赖于... thx的库引起的 – qiuxiafei 2011-04-07 14:00:07

相关问题