如何知道线程内存使用情况?

时间:2009-04-22 13:42:30

标签: c pthreads memory-management

是否可以知道给定的 phtread 线程使用了多少内存?我对VmRSS这样的信息感兴趣。

3 个答案:

答案 0 :(得分:5)

每个线程都使用一个固定大小的堆栈,并在线程启动时创建。它通常为512 K / 1M,但它在启动时只是虚拟大小。

但是,对于动态分配的数据(malloc),它是一个进程范围的信息,而不是每个线程。请注意,一些替代的malloc实现(如tcmalloc)可以提供更高级的统计信息。

答案 1 :(得分:0)

此外,操作系统本身可以在一个单独的线程中释放内存,以加快对free()函数的调用,使收集正确的统计数据更加成熟

答案 2 :(得分:0)

根据我自己使用pthread库的经验,如果使用默认属性创建线程,则其堆栈大小为10 MB。它可能是特定于平台的。

如果您对减小堆栈大小感兴趣,可以使用pthread_attr_setstacksize()。为了估计堆栈大小的正确值,您可以使用名为“checkstack.pl”的脚本。它在Linux内核源代码中提供(在“scripts”目录下)。

另见http://www.kegel.com/stackcheck