如何找到进程的堆栈大小? / proc / 5848 / status给了我VmStk,但这并没有改变
无论我在测试程序中执行的循环和递归有多少,这个值几乎没有变化。
当我查看/ proc / pid / status时,所有进程都有136k,并且不知道该值来自何处。
谢谢,
答案 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段感兴趣。