我正在使用Ubuntu 11.04。如何查找进程的最大调用栈大小以及堆栈每个帧的大小?
您可以使用getrlimit
查询最大进程和堆栈大小。 堆栈帧没有固定的大小,它取决于每个帧需要多少本地数据(即本地变量)。
要在命令行上执行此操作,可以使用ulimit。
如果要读取运行中进程的这些值,我不知道任何工具可以做到这一点,但很容易查询/proc文件系统:
cat /proc/<pid>/limits
alloca()
(和其他一些函数)的调用可以动态增加栈帧的大小。 - Marcelo Cantos以下调用ulimit
返回以kibibytes(210 = 1024字节)为单位的最大堆栈大小:
ulimit -s
getrlimit()
和setrlimit()
不是Linux命令,而是系统调用。
因此,要获取它们的结果,您需要像Bash脚本或任何其他可执行脚本一样返回系统调用的结果。
ulimit -s
可以显示堆栈大小。 - user2023370