gpt4 book ai didi

c - 简单 float 组初始化中的堆栈溢出

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:40 25 4
gpt4 key购买 nike

我正在尝试让在 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 中增加,方法是转到“属性”->“链接器”->“系统”->“堆栈保留大小”并给它更多。我进行了测试,代码通过将堆栈增加到 8M 来工作。

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

最佳答案

你的数组太大,栈放不下,试试堆:

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

Segmentation fault when allocating large arrays on the stack

关于c - 简单 float 组初始化中的堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22388244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com