【问题标题】:How much stack do programs use?程序使用多少堆栈?
【发布时间】:2012-09-29 02:02:52
【问题描述】:

实际上,我并不期待具体问题的答案。我真的想知道是否有任何研究可以深入了解整个频谱的使用模式。

更准确地说:是否有任何关于调用堆栈程序通常在不同平台、工作负载、编译器等中使用多少的已发布调查?

编辑:回应一些 cmets 暗示这个问题毫无意义......

我自己的观察表明,堆栈利用率遵循类似于指数分布的规律,平均值约为数十字节。我希望能对不同维度上的平均值的稳定性给出某种指示。即,如果我测量各种程序的堆栈消耗,无论我如何对结果进行分组,它们是否会表现出相似的 p.d.f.,或者说,Linux 程序的堆栈平均比 Windows 程序更大/更小,还是静态类型语言与动态类型语言,等等?

相比之下,总 RAM 使用量受到当前问题的具体情况的影响,特别是该程序有效执行其职责所需的工作集。我的假设是堆栈利用率的分布将在各种环境中相对稳定,我只是想知道这个或类似的假设是否被证实或证伪。

(注意:我不会假装我的观察结果是准确的、全面的或任何科学的。这就是我在这里提出问题的原因。)

【问题讨论】:

  • 你也可以问“程序分配了多少内存?”或“人们几岁?”。你找不到的答案没有任何意义。
  • @mah:不太一样。我已经修改了我的问题以解决您的问题。
  • 我认为这是一个很好的问题,在一般情况下它可能没有得到回答,因为它还没有成为问题。话虽如此,我认为如果您缩小视线并查看嵌入式系统研究,您可能会找到答案。

标签: memory callstack


【解决方案1】:

我可以以某种方式解释您的问题。在 Java 中,默认的原生堆栈大小为 128k,最小值为 1000 字节。默认的 java 堆栈大小为 400k,最小值为 1000 字节。当然,您可以分别使用 -ss 和 -oss 参数来扩展大小。
更准确地说:我不明白您需要跨平台发布关于堆栈的调查。

【讨论】:

  • 不是专门的平台;这只是我认为可能感兴趣和/或有价值的维度之一。此外,可以从答案的第一部分推断出需要:如何确定 128 kB 和 400 kB 等数量是跨平台的合理默认值?
猜你喜欢
  • 2011-04-24
  • 2015-05-01
  • 2016-09-19
  • 2017-01-11
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
相关资源
最近更新 更多