如何衡量流程的堆栈大小?

时间:2012-12-06 17:57:13

标签: linux

如何找到进程的堆栈大小? / proc / 5848 / status给了我VmStk,但这并没有改变

无论我在测试程序中执行的循环和递归有多少,这个值几乎没有变化。

当我查看/ proc / pid / status时,所有进程都有136k,并且不知道该值来自何处。

谢谢,

2 个答案:

答案 0 :(得分:4)

在Linux上确实没有“进程的堆栈大小”这样的东西。进程有一个起始堆栈,但正如您所见,它们很少从标准堆栈中分配很多。相反,进程只是从操作系统分配通用内存并将其用作堆栈。因此操作系统无法知道 - 只有从流程内部可以看到细节。

典型的现代操作系统可能会对操作系统施加8MB的堆栈大小限制。然而,进程通常会在堆栈上分配更大的对象。那是因为应用程序使用的是纯粹应用程序管理的堆栈,而不是操作系统的堆栈。

多线程进程始终如此。对于单线程进程,它们实际上可能只是使用非常非常小的堆栈。

答案 1 :(得分:1)

也许您只想获得某个流程的地址映射。对于过程1234,顺序读取/proc/1234/maps伪文件。对于您自己的流程,请阅读/proc/self/maps

尝试

 cat /proc/self/maps

了解它(上面的命令显示执行它的cat进程的地址映射。)

阅读proc(5)手册页了解详情。

您可能也会对流程限制感兴趣,例如: getrlimit(2)和相关的系统调用。

我不确定堆栈大小是否有一定的准确性,特别是对于多线程进程。

也许您对使用MAP_GROWSDOWN的{​​{3}} - ed段感兴趣。