问题标签 [stack-size]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
199 浏览

c# - 确定堆栈深度与某些输入大小成线性比例?

在使用 Java(或任何其他程序语言)进行编程时,我经常在递归解决问题和迭代解决问题之间进行选择。递归选项通常比迭代解决方案更优雅,所以我通常选择递归解决方案。除了一个例外:

担心堆栈溢出如果最大堆栈深度与输入的大小成线性比例(或更糟),我倾向于避免递归解决方案。然而,我意识到在许多其他语言中(甚至是针对 JVM 的语言,例如 Scala 和 Clojure),许多算法(例如基本列表算法)通常以递归方式表示,其中最大堆栈深度与列表的长度成正比。(1)那么,我对线性堆栈深度算法中堆栈溢出的担忧是否合理?

TL;DR:什么“堆栈深度复杂度”被认为是合理的?对数复杂度,例如递归二分搜索,O(log N)肯定没问题,但是O(N)O(N log N)O(N 2 )怎么样?你通常会在哪里画线?(2)

(1) 我意识到这些语言有时支持 @tailrec 之类的东西,但这个问题涉及 Java、C# 等。
(2) 请注意,我不关心 CPU 开销等。只是堆栈深度。

0 投票
2 回答
1019 浏览

objective-c - NSThread setStackSize 没有设置线程的大小

我正在使用NSThread并为其设置堆栈大小,如下所示:

正如为 for 编写的 Apple 文档-[NSThread setStackSize:]

讨论
您必须在开始线程之前调用此方法。在线程启动后设置堆栈大小会更改属性大小(由 stackSize 方法反映),但不会影响为线程预留的实际页数。

但是当我稍后在调试器中检查堆栈大小时,我没有得到我设置的值:

setStackSize:我的问题是,如果该方法什么都不做,为什么还要存在?

请让我知道我错在哪里,或者APIsetStackSize:是否没有任何用处?

编辑: 关于这个问题,请参阅@Josh Caswell 的回答,我错过了 4K 中的 K ,因此上面的代码可以正常工作,如下所示:

这个问题的扩展:

有人可以解释一下为什么Apple给出了这个方法setStackSize,以及如何以及何时使用这个特定的方法,因为它需要用户进行大量计算才能计算出将使用多少字节。

我想知道它在 NSThread 中的确切用途?

谢谢!

0 投票
2 回答
6563 浏览

c - C 嵌入式系统堆栈和堆大小

如何确定嵌入式系统上正在运行的 C 程序的当前堆栈和堆大小?另外,我怎样才能发现我的嵌入式系统允许的最大堆栈和堆大小?我考虑过线性调用 malloc() 并增加大小,直到找不到堆大小,但是我对堆栈的大小更感兴趣。

我正在使用 mbed NXP LPC1768,并且正在使用在 GitHub 上开发的名为 gcc4mbed 的离线编译器。

有更好的想法吗?非常感谢所有帮助!

0 投票
2 回答
4152 浏览

c# - 如何更改控制台应用程序的堆栈大小?

可能重复:
如何更改 .NET 程序的堆栈大小?

我想更改以下控制台应用程序的堆栈大小:

大约是什么时候n。100,000,深度dfs约为。100,000 并且应用程序抛出StackOverflowException.

我知道默认堆栈大小是 1 MB,但我不知道如何更改它。

0 投票
0 回答
87 浏览

windows-7-x64 - 使用anycpu构建时,它有stackoverflow异常

我在托管代码中有一个项目(C# winform 程序)。当我在 vs2010 中构建时(尝试使用 .net 2.0 和 .net 4.03),如果目标是 x64 或 x84,它们都在 win 7 环境中运行得更好。但是当使用anycpu构建时,它在win 7中有stackoverflow异常。它在逻辑中使用了一个大堆栈。我尝试了以下方法:1)创建新线程,将大小设置为 400000,2)构建后运行 corflags xxx.exe /32BIT- 3)运行 editbin xxx.exe /STACK:400000。

问题仍然存在。请帮忙。

提前致谢。

0 投票
1 回答
409 浏览

osx-mountain-lion - 如何将堆栈大小设置为无限 OS X 10.8?

我不知道我是否做错了什么,但是当我输入

$limit stacksize unlimited

进入 Mountain Lion 上的一个终端,我得到:

-bash: limit: command not found

所以我尝试:

sudo ulimit -s unlimited

这也行不通。你能告诉我我应该用什么来在终端中获得无限的堆栈大小吗?

0 投票
2 回答
4466 浏览

c++ - Setting stack size with GCC 4.6.2 C++ Qt, MinGW, Vista

I want to increase the stack size of my program because I have a complex recursive algorithm it would be a REAL pain to rewrite iteratively.

I am using GCC C++ 4.6.2. MinGw, building with a Qt .pro file (I'm using Qt for the GUI front end), on Vista.

Advice on this website is to use:-

and to send this to the g++ link phase with:-

but the linker errors with:-

g++: error: unrecognized option '--stack,4194304'

I have tried sending the options to the compile phase with QMAKE_CXXFLAGS += but g++ still barfs.

The only option that does not barf is -fno-stack-limit from the GCC documentation (.pdf 4.5.0, p.260), but my stack still overflows. The other options mentioned in that para. barf.

0 投票
0 回答
58 浏览

memory - 在目标文件级别预先确定函数的大小

如何预先确定大小,函数在执行过程中会消耗在 RAM 中。这必须在目标文件级别找到?ie - 更清楚地说,如果我有一个目标文件,我应该可以说这个文件消耗了这么多 BSS、DS、CS 以及堆栈和堆。在这里,我可以使用 size 和 nm 命令对 BSS、DS 和 CS 进行分类,但无法确定将消耗多少堆栈或堆。

任何 1 都可以帮我解决这个..

在此先感谢
kihdrak

0 投票
2 回答
140 浏览

.net - 值类型的堆栈大小

都说值类型存储在堆栈中。但是存储值类型的堆栈的大小是多少?没有人解释它。

0 投票
2 回答
1173 浏览

ruby - Ruby 的 Fiber 4kB 堆栈大小的后果

纤维对我来说是一个相对较新的概念。我知道每根光纤的堆栈大小限制为 4kB,我一直在读我应该“提防”这一点。这个限制对现实世界的影响究竟是什么?

编辑:

看起来这个 4kB 的限制毕竟不是一个障碍,它需要光纤本身内的大量局部变量 (4,045) 才能引发 SystemStackError。

不是最优雅的代码,但它似乎证明了光纤堆栈的局限性。似乎它只是返回值、局部变量(所有这些都包含对堆上对象的引用)和方法调用被放入堆栈。我没有测试从光纤调用的方法中的局部变量等是否是光纤堆栈的一部分。

编辑2:

修改了上面的代码。看起来被调用方法中的变量等成为了光纤堆栈的一部分。如果是这种情况,那么调用深度(即使没有递归)可能会成为一个更大的问题,因为方法本身可能需要比变量更多的堆栈空间(这似乎是对堆上对象的透明引用)。

以下代码在第 4,031 次迭代中失败,并表明被调用方法中的变量成为光纤堆栈的一部分:

编辑3:

刚刚尝试在 Rubinius 2.0 上运行初始代码示例。它的纤维似乎没有 4kB 的堆栈限制,尽管超过大约 3,500 次迭代它变得越来越慢,并且在大约 5,000 次迭代时它平均每秒迭代一次。我不知道 RBX 是否有限制,因为我在超过 5,100 次迭代时退出了执行。RBX 使用的内存也比 MRI 1.9.3 多几倍。

JRuby 1.7 似乎也没有 4kB 的光纤堆栈大小,如果光纤有最大堆栈大小,我不知道。我完成了第一个代码示例的 5,000 次迭代,没有出现任何问题,尽管正如可以预料的那样,JVM 消耗了几百 MB 的 RAM。