【发布时间】:2020-11-17 21:42:13
【问题描述】:
在许多动态规划和图问题中,都需要进行长深度递归。
我目前在 Windows 中为我的 c++ 程序使用 vscode 和 mingw。 但在默认情况下,据我所知,windows 的最大堆栈大小为 1MB。所以我遇到了 segmentation fault / stackoverflow 问题。我很清楚我可以更改循环中的每个递归,但我不想要那些东西。
在像 Google Hashcode、Facebook Hackercup 这样的一些编程竞赛中,他们提供了大量输入,如果我在我的机器上运行该输入,它会面临 分段错误/stackoverflow 问题。
现在我需要增加最大堆栈大小。
我找到了一些方法,这是我的问题。
-
g++ -O2 -std=c++11 -Wall -Wl,--stack=268435456 Untitled1.cpp -o a.exe当我在 windows 命令提示符下使用此命令时,它工作得很好。但是它在 vscode 终端中给出了错误(我不知道为什么。)我找到了这个命令 here. -
我在某处找到了
#pragma comment(linker, "/STACK:2000000"),但我没有清楚地理解这一点。 -
有没有办法在vscode中更改一次最大堆栈大小,这样我每次编译时都不需要指定?
我只想增加最大堆栈大小,
【问题讨论】:
-
g++命令中的那个逗号看起来很可疑。 -
您需要更大的大小是因为您使用了递归,还是因为您有非常大的数组而需要它?
-
@Yksisarvinen 编译器甚至在错误的逗号下划线
-
如果您的算法需要巨大的堆栈大小,首先要做的是重新考虑该算法,而不是增加堆栈大小。除非你想使用一个根本被破坏的算法。
-
逗号错误与powershell试图解析命令有关:见stackoverflow.com/q/62072005/2721883虽然由于其他问题没有解决方案,您可以使用
--%来阻止powershell解析命令的其余部分 (docs.microsoft.com/en-us/powershell/module/…)
标签: c++ visual-studio-code mingw stack-overflow