C 简单浮点数组初始化中的堆栈溢出

C 简单浮点数组初始化中的堆栈溢出,c,windows-7,C,Windows 7,我正试图让在Linux上工作的代码也在我的Windows7上工作 当我重试相同的代码时,它因堆栈溢出而崩溃。然后我尽我所能找出导致它崩溃的线路,它留给我的是: #include <stdio.h> #include <stdlib.h> #include <cuda_runtime.h> /* 256k == 2^18 */ #define ARRAY_SIZE 262144 #define ARRAY_SIZE_IN_BYTES (sizeof(floa

我正试图让在Linux上工作的代码也在我的Windows7上工作

当我重试相同的代码时,它因堆栈溢出而崩溃。然后我尽我所能找出导致它崩溃的线路,它留给我的是:

#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;
}
#包括
#包括
#包括
/*256k==2^18*/
#定义数组大小262144
#以字节为单位定义数组大小(sizeof(float)*(数组大小))
内部主(空)
{
浮动a[ARRAY_SIZE]={};
浮动结果=0;
printf(“总和为:%f(应约为130万,随机分布均匀)\n”,结果);
返回0;
}
如果我将ARRAY_SIZE更改为256,代码运行正常。但是,对于当前值,
浮动[ARRAY\u SIZE]
行会因堆栈溢出而导致运行时崩溃。如果我使用
float a[ARRAY_SIZE],这无关紧要
浮动[ARRAY_SIZE]={},它们都以相同的方式崩溃

有什么想法吗

使用VisualStudio2010进行编译


好的,堆栈大小似乎已经解释过了,说1M是Windows上的默认值

显然,在VS2010中,可以通过属性->链接器->系统->堆栈保留大小来增加它,并提供更多。我进行了测试,代码通过将堆栈提升到8M来工作


从长远来看,我可能应该走马洛克之路。

好吧,让我猜猜。我听说Windows上的默认堆栈大小是1MB。您的
数组大小(以字节为单位)
正好是1MB btw(假设浮点为4字节)。所以这可能就是原因


请参阅此链接:

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

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

我猜您的堆栈太小,无法容纳256K
float
s。我认为这与CUDA无关。是的,可能不是。我可以删除引用。对。这里似乎指定了堆栈大小:,表示Windows上的默认值为1M,显然在VS2010中,可以通过属性->链接器->系统->堆栈保留大小来增加它,并提供更多。从长远来看,我可能应该走马洛克之路。谢谢