10

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

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

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

谢谢,

4

2 回答 2

6

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

典型的现代操作系统可能具有操作系统强加的 8MB 堆栈大小限制。然而,进程通常会在其堆栈上分配更大的对象。这是因为应用程序正在使用一个纯粹由应用程序管理的堆栈,而不是就操作系统而言的堆栈。

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

于 2012-12-06T17:58:46.387 回答
3

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

尝试

 cat /proc/self/maps

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

有关详细信息,请阅读proc(5)手册页。

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

我不确定堆栈大小是否具有某种精确意义,尤其是对于多线程进程。

也许你对mmap(2) -ed 段感兴趣MAP_GROWSDOWN

于 2012-12-06T18:48:38.000 回答