【问题标题】:How to increase max stack size in c++ using vscode如何使用 vscode 在 C++ 中增加最大堆栈大小
【发布时间】:2020-11-17 21:42:13
【问题描述】:

在许多动态规划和图问题中,都需要进行长深度递归。

我目前在 Windows 中为我的 c++ 程序使用 vscodemingw。 但在默认情况下,据我所知,windows 的最大堆栈大小为 1MB。所以我遇到了 segmentation fault / stackoverflow 问题。我很清楚我可以更改循环中的每个递归,但我不想要那些东西。

在像 Google Hashcode、Facebook Hackercup 这样的一些编程竞赛中,他们提供了大量输入,如果我在我的机器上运行该输入,它会面临 分段错误/stackoverflow 问题。

现在我需要增加最大堆栈大小

我找到了一些方法,这是我的问题。

  1. g++ -O2 -std=c++11 -Wall -Wl,--stack=268435456 Untitled1.cpp -o a.exe 当我在 windows 命令提示符下使用此命令时,它工作得很好。但是它在 vscode 终端中给出了错误(我不知道为什么。)我找到了这个命令 here.

  2. 我在某处找到了#pragma comment(linker, "/STACK:2000000"),但我没有清楚地理解这一点。

  3. 有没有办法在vscode中更改一次最大堆栈大小,这样我每次编译时都不需要指定?

我只想增加最大堆栈大小,

【问题讨论】:

  • g++ 命令中的那个逗号看起来很可疑。
  • 您需要更大的大小是因为您使用了递归,还是因为您有非常大的数组而需要它?
  • @Yksisarvinen 编译器甚至在错误的逗号下划线
  • 如果您的算法需要巨大的堆栈大小,首先要做的是重新考虑该算法,而不是增加堆栈大小。除非你想使用一个根本被破坏的算法。
  • 逗号错误与powershell试图解析命令有关:见stackoverflow.com/q/62072005/2721883虽然由于其他问题没有解决方案,您可以使用--%来阻止powershell解析命令的其余部分 (docs.microsoft.com/en-us/powershell/module/…)

标签: c++ visual-studio-code mingw stack-overflow


【解决方案1】:

VSCode 使用 powershell 作为其 shell,逗号是 powershell 的特殊字符。您需要将它们放在引号内。

g++ -O2 -std=c++11 -Wall "-Wl,--stack=268435456" Untitled1.cpp -o a.exe

应该可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-02
    • 2020-08-05
    • 2012-04-18
    • 1970-01-01
    • 2015-11-22
    • 2013-12-24
    • 2011-09-29
    相关资源
    最近更新 更多