如何找到最大堆栈大小?
Posted
技术标签:
【中文标题】如何找到最大堆栈大小?【英文标题】:How do I find the maximum stack size? 【发布时间】:2011-11-24 01:26:17 【问题描述】:我正在开发 Ubuntu 11.04。如何找出进程的最大调用堆栈大小以及堆栈的每一帧的大小?
【问题讨论】:
【参考方案1】:以下对ulimit
的调用返回以千字节为单位的最大堆栈大小(210 = 1024 字节):
ulimit -s
【讨论】:
【参考方案2】:getrlimit()
和 setrlimit()
不是 Linux 命令。它们是系统调用。
因此,为了获得它们的结果,您需要 bash 脚本或任何其他返回系统调用结果的可执行脚本之类的东西。
【讨论】:
【参考方案3】:快速的 Google 搜索应该会显示 some information on this subject。
> ulimit -a # shows the current stack size
【讨论】:
当然,现在快速谷歌搜索可以提供这个页面。【参考方案4】:您可以使用getrlimit
查询最大进程和堆栈大小。堆栈帧没有固定大小;这取决于每帧需要多少本地数据(即局部变量)。
要在命令行上执行此操作,您可以使用 ulimit。
如果你想为正在运行的进程读取这些值,我不知道有什么工具可以做到这一点,但是查询 /proc 文件系统很容易:
cat /proc/<pid>/limits
【讨论】:
我收到命令未找到错误。我需要为这个命令安装什么包? 他们需要有一些起始尺寸,对吗?编译器是否事先计算堆栈帧的大小(考虑所有局部变量)然后分配帧? @Bruce:是的,堆栈帧的布局和大小很大程度上取决于编译器。 “创建”一个框架就像调整堆栈指针一样简单,以便为被调用的函数留出足够的空间来执行其业务。此外,对alloca()
(可能还有其他人)的调用可以动态增长框架。【参考方案5】:
您可以使用getrlimit
查看堆栈大小并使用setrlimit
更改它。
Increase stack size in Linux with setrlimit 帖子中有一个示例。
【讨论】:
以上是关于如何找到最大堆栈大小?的主要内容,如果未能解决你的问题,请参考以下文章