如何找到最大堆栈大小?

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 帖子中有一个示例。

【讨论】:

以上是关于如何找到最大堆栈大小?的主要内容,如果未能解决你的问题,请参考以下文章

为什么我的垃圾收集日志显示3.8GB作为最大可用堆大小,而我已经分配了4GB作为最大堆大小?

浅谈堆栈队列

c语言:如果有一大堆数,怎么找出其中出现次数最多的那个

Java 8 中默认的最大堆大小 (-Xmx) 是多少?

数据结构之堆栈

LeetCode 239 滑动窗口最大值- Python手撕最大堆