堆栈溢出在一个简单的浮点数组初始化

时间:2014-03-13 18:53:20

标签: c windows-7

我正在尝试获取在Linux上运行的代码,以便在我的Windows 7上运行。

当我重试相同的代码时,它会因堆栈溢出而崩溃。然后我删除了所有我能找到的导致它崩溃的线路,并且它给我留下了这个:

#include <stdio.h>
#include <stdlib.h>

#include <cuda_runtime.h>

/* 256k == 2^18 */
#define ARRAY_SIZE 262144
#define ARRAY_SIZE_IN_BYTES (sizeof(float) * (ARRAY_SIZE))


int main(void)
{

    float a[ARRAY_SIZE] = { };

    float result = 0;

    printf("sum was: %f (should be around 1 300 000 with even random distribution)\n", result);

    return 0;
}

如果我将ARRAY_SIZE更改为256,则代码运行正常。但是对于当前值,float a[ARRAY_SIZE]行会因堆栈溢出而崩溃运行时。如果我使用float a[ARRAY_SIZE];float a[ARRAY_SIZE] = { };并不重要,它们都会以同样的方式崩溃。

任何想法可能出错?

使用Visual Studio 2010进行编译。


好的,堆栈大小似乎解释为here,说1M是Windows上的默认值。

显然可以通过去属性来增加VS 2010 - &gt;链接器 - &gt;系统 - &gt;堆栈预留大小并给它一些。我测试了代码的工作原理是将堆栈加到8M。

从长远来看,我应该采用malloc方式。

2 个答案:

答案 0 :(得分:1)

你的数组太大而无法放入堆栈,请尝试使用堆:

float *a;
a = malloc(sizeof(float) * ARRAY_SIZE);

Segmentation fault when allocating large arrays on the stack

答案 1 :(得分:0)

好吧,让我猜一下。我听说Windows上的默认堆栈大小是1 MB。你的ARRAY_SIZE_IN_BYTES正好是1 MB btw(假设浮点数是4个字节)。那可能就是原因

请参阅此链接:C/C++ maximum stack size of program