如何找到进程的堆栈大小?/proc/5848/status 给了我 VmStk 但这并没有改变
无论我在我的测试程序中做了多少循环和递归,这个值几乎没有变化。
当我查看 /proc/pid/status 时,所有进程都有 136k 并且不知道该值来自哪里。
谢谢,
如何找到进程的堆栈大小?/proc/5848/status 给了我 VmStk 但这并没有改变
无论我在我的测试程序中做了多少循环和递归,这个值几乎没有变化。
当我查看 /proc/pid/status 时,所有进程都有 136k 并且不知道该值来自哪里。
谢谢,
Linux 上确实没有“进程的堆栈大小”这样的东西。进程有一个起始堆栈,但正如您所见,它们很少从标准堆栈中分配太多。相反,进程只是从操作系统分配通用内存并将其用作堆栈。所以操作系统无法知道——这些细节只能从进程内部看到。
典型的现代操作系统可能具有操作系统强加的 8MB 堆栈大小限制。然而,进程通常会在其堆栈上分配更大的对象。这是因为应用程序正在使用一个纯粹由应用程序管理的堆栈,而不是就操作系统而言的堆栈。
这对于多线程进程总是如此。对于单线程进程,它们实际上可能只使用非常非常少的堆栈。
也许您只是想获取某个进程的地址映射。对于进程 1234,依次读取/proc/1234/maps
伪文件。对于您自己的过程,请阅读/proc/self/maps
尝试
cat /proc/self/maps
感受一下(上面的命令显示了cat
执行它的进程的地址映射)。
有关详细信息,请阅读proc(5)手册页。
您可能还对进程限制感兴趣,例如getrlimit(2)和相关的系统调用。
我不确定堆栈大小是否具有某种精确意义,尤其是对于多线程进程。
也许你对mmap(2) -ed 段感兴趣MAP_GROWSDOWN
。