3

是否有可能知道给定的phtread线程正在使用多少内存?我对类似 VmRSS 的信息感兴趣。

4

3 回答 3

5

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

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

于 2009-04-22T13:51:23.790 回答
0

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

于 2009-04-22T15:13:50.270 回答
0

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

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

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

于 2009-04-22T15:32:30.957 回答