【发布时间】:2011-11-24 01:26:17
【问题描述】:
我正在开发 Ubuntu 11.04。如何找出进程的最大调用堆栈大小以及堆栈的每一帧的大小?
【问题讨论】:
我正在开发 Ubuntu 11.04。如何找出进程的最大调用堆栈大小以及堆栈的每一帧的大小?
【问题讨论】:
以下对ulimit 的调用返回以千字节为单位的最大堆栈大小(210 = 1024 字节):
ulimit -s
【讨论】:
getrlimit() 和 setrlimit() 不是 Linux 命令。它们是系统调用。
因此,为了获得它们的结果,您需要 bash 脚本或任何其他返回系统调用结果的可执行脚本之类的东西。
【讨论】:
快速的 Google 搜索应该会显示 some information on this subject。
> ulimit -a # shows the current stack size
【讨论】:
您可以使用getrlimit 查询最大进程和堆栈大小。堆栈帧没有固定大小;这取决于每帧需要多少本地数据(即局部变量)。
要在命令行上执行此操作,您可以使用 ulimit。
如果你想为正在运行的进程读取这些值,我不知道有什么工具可以做到这一点,但是查询 /proc 文件系统很容易:
cat /proc/<pid>/limits
【讨论】:
alloca()(可能还有其他人)的调用可以动态增长框架。
您可以使用getrlimit 查看堆栈大小并使用setrlimit 更改它。
【讨论】: