如何查找最大堆栈大小?

36

我正在使用Ubuntu 11.04。如何查找进程的最大调用栈大小以及堆栈每个帧的大小?

5个回答

33

快速的谷歌搜索应该会显示一些关于这个主题的信息:链接

> ulimit -a         # shows the current stack size

32
当然,现在快速搜索谷歌就可以找到这个页面。 - gerardw
4
...而且链接已失效。另外,使用ulimit -s可以显示堆栈大小。 - user2023370

31

您可以使用getrlimit查询最大进程和堆栈大小。 堆栈帧没有固定的大小,它取决于每个帧需要多少本地数据(即本地变量)。

要在命令行上执行此操作,可以使用ulimit。

如果要读取运行中进程的这些值,我不知道任何工具可以做到这一点,但很容易查询/proc文件系统:

cat /proc/<pid>/limits

我收到了一个“命令未找到”的错误。我需要安装哪个软件包才能使用这个命令? - Bruce
它们需要有一些起始大小,对吧?编译器是否预先计算堆栈帧的大小(考虑所有本地变量),然后分配帧? - Bruce
1
@Bruce:是的,栈帧的布局和大小很大程度上取决于编译器。 "创建"一个栈帧就像调整堆栈指针以留出足够的空间让被调用的函数执行其业务一样简单。此外,对alloca()(和其他一些函数)的调用可以动态增加栈帧的大小。 - Marcelo Cantos

24

以下调用ulimit返回以kibibytes(210 = 1024字节)为单位的最大堆栈大小:

ulimit -s

5

您可以使用 getrlimit 来查看堆栈大小并使用 setrlimit 进行更改。

这篇文章 中有一个示例,介绍如何在 Linux 上使用 setrlimit 增加堆栈大小。


4

getrlimit()setrlimit()不是Linux命令,而是系统调用。

因此,要获取它们的结果,您需要像Bash脚本或任何其他可执行脚本一样返回系统调用的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接