C++ 有没有办法知道一个线程使用了多少内存?

C++ 有没有办法知道一个线程使用了多少内存?,c++,linux,multithreading,memory,gdb,C++,Linux,Multithreading,Memory,Gdb,我正在维护一个程序,它在启动时使用600+MB内存,什么也不做 我想知道每个线程使用了多少内存,gdb能做这项工作吗?我想一个内存分析工具就像或者可能就是你需要的 此外,如果您的程序在启动时使用600Mb,您应该首先检查您的依赖库在加载后正在执行的操作。您可能还没有输入main(),但他们可能正在创建一些重量级全局静态对象,这些对象在事情开始之前就已经初始化了 要记住的另一件事是,每个线程都将为其堆栈分配大量内存。每个线程可能有一兆字节或更多,所以如果你自己创建600个线程,那么已经有600Mb

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


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

我想一个内存分析工具就像或者可能就是你需要的

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


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

我认为内存分析工具就像或者可能就是你所需要的

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


要记住的另一件事是,每个线程都将为其堆栈分配大量内存。每个线程可能有一兆字节或更多,因此如果您自己创建600个线程,那么已经有600Mb的线程了。

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

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

第一个问题是:您如何知道它使用的是600MB?您可能看错了。线程共享全局堆空间。线程的唯一局部数据是其堆栈和线程局部变量。第一个问题是:您如何知道它使用的是600MB?您可能看错了。线程共享全局堆空间。线程的唯一局部数据是其堆栈和线程局部变量。