【问题标题】:How do I find the maximum stack size?如何找到最大堆栈大小?
【发布时间】:2011-11-24 01:26:17
【问题描述】:

我正在开发 Ubuntu 11.04。如何找出进程的最大调用堆栈大小以及堆栈的每一帧的大小?

【问题讨论】:

    标签: linux ubuntu stack


    【解决方案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 帖子中有一个示例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-20
          • 1970-01-01
          • 2013-09-26
          • 2011-07-27
          • 1970-01-01
          • 2014-02-25
          相关资源
          最近更新 更多