我第一次使用Visual Studio 13编译c代码。代码完美地运行O.K.使用大小为64 * 64的2d数组(我的程序中有一些数组)但是如果我将数组大小增加到128 * 128则不会运行(但编译正确)。相反,它会给出一条消息“.exe已停止工作”。如果我从linux运行代码,我的机器有4GB内存和相同的程序运行128 * 128阵列。
让我提供一些更多细节:我在同一台机器上使用英特尔C编译器(非商业版)从linux运行相同的代码。但由于某些问题,我现在被限制在Windows环境中工作。我搜索并安装了两个c编译器(1)Visual Studio 13和(2)Borland C.两者都适用于小阵列。但是当我增加数组大小时,Visual Studio会给出消息“.exe已停止工作”。我使用“开发人员命令提示符VS 13”中的“cl”编译程序。
我觉得问题在于堆栈大小。
在链接detailed explanation中(如下所示)我在linux环境中看到了一个用于增加堆栈大小的命令“ulimit”。我记得几年前使用它。
我觉得我们接近解决方案,但由于我未能执行dumpbin /headers executable_file
或editbin /STACK:size
,我的Windows(和VS 2013)问题仍然存在。其实我觉得我不知道如何执行它们。我尝试从“Developer Command Prompt VS 13”执行它们以及使用Run(windows start bottom-> search(run) - > Run(prop up))。如果可能,我请您提供更多详细信息。
我搜索并找到了这个网站并认为可以找到解决方案。
请帮忙。我想使用Windows中的Visual Studio 13运行。
答案 0 :(得分:12)
这背后的原因似乎是堆栈溢出。可以通过增加堆栈大小来解决该问题
在visual studio中,您可以使用/STACK:reserve[,commit]
来完成此操作。阅读MSDN article。
在Windows平台下,堆栈大小信息包含在可执行文件中。它可以在Visual Studio C ++编译期间设置
或者,Microsoft提供了一个可以更改的程序editbin.exe
可执行文件直接。以下是更多细节:
Windows(编译期间):
Project->Setting
。Link
页。Category to Output
。Reserve:
下的Stack
allocations
字段中输入您的首选堆栈大小。例如,十进制32768
或十六进制0x20000
。Windows(修改可执行文件):
Microsoft Visual Studio中包含两个程序,dumpbin.exe
和editbin.exe
。运行dumpbin /headers executable_file
,您可以在size of stack reserve
中看到optional header values
信息。运行editbin /STACK:size
以更改默认堆栈大小。
答案 1 :(得分:1)
Visual Studio不起作用?
虽然我不认为VS是一种有效的开发工具,但我非常怀疑它会导致你的问题。
128 * 128是16384.如果你有太少的堆栈空间(在Windows上,默认情况下它是1MB,如果我没有记错的话),你定义了一个e的数组。 G。足够大struct
s(大小为64字节,更准确地说),然后这很容易导致堆栈溢出,因为自动数组通常(尽管不一定)在堆栈上分配。
答案 2 :(得分:0)
听起来你正在尝试在堆栈上声明大型数组。堆栈内存通常是有限的;听起来你已经满溢了。
您可以通过提供数组静态持续时间
来解决此问题static BigStruct arr[128][128];
或为其动态分配内存
BigStruct (*arr)[128] = malloc(sizeof(*arr) * 128);
// use arr
free(arr);
答案 3 :(得分:0)
完整的Visual Studio布局至少需要35 GB的磁盘空间。有关更多信息,请参阅系统要求。有关如何仅使用要安装的组件创建布局的信息,请参见使用命令行参数来安装Visual Studio。