是否可以知道给定的 phtread 线程使用了多少内存?我对VmRSS这样的信息感兴趣。
答案 0 :(得分:5)
每个线程都使用一个固定大小的堆栈,并在线程启动时创建。它通常为512 K / 1M,但它在启动时只是虚拟大小。
但是,对于动态分配的数据(malloc),它是一个进程范围的信息,而不是每个线程。请注意,一些替代的malloc实现(如tcmalloc)可以提供更高级的统计信息。
答案 1 :(得分:0)
此外,操作系统本身可以在一个单独的线程中释放内存,以加快对free()函数的调用,使收集正确的统计数据更加成熟
答案 2 :(得分:0)
根据我自己使用pthread库的经验,如果使用默认属性创建线程,则其堆栈大小为10 MB。它可能是特定于平台的。
如果您对减小堆栈大小感兴趣,可以使用pthread_attr_setstacksize()。为了估计堆栈大小的正确值,您可以使用名为“checkstack.pl”的脚本。它在Linux内核源代码中提供(在“scripts”目录下)。