首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改VSCode中的堆栈大小

更改VSCode中的堆栈大小
EN

Stack Overflow用户
提问于 2022-03-05 16:35:52
回答 1查看 232关注 0票数 0

我想声明并初始化堆栈上的大型3D数组。C函数将大型3D数组声明为:

代码语言:javascript
复制
#define NMATS 36
#define ROWS 10000
#define COLS 9

void myfunc(void)
{
  double mat[NMATS][ROWS][COLS];
// Initialize later ...
}

在VS代码中,命令cl.exe /Zi /EHsc /Fe: C:\Users\usr\project\c\build\main.exe c:\Users\usr\project\c\src\main.c成功地构建了代码。但是,在运行时,我得到了错误:

代码语言:javascript
复制
Unable to open 'chkstk.asm': File not found.

这表明我的堆栈储备规模太小了。但是,我对VS代码还比较陌生,我想知道如何增加堆栈的保留大小,并为cl.exe指定选项。

EN

回答 1

Stack Overflow用户

发布于 2022-03-05 16:58:45

正如注释中提到的,执行动态分配,这样您就不必依赖编译器开关和体系结构限制:

代码语言:javascript
复制
#define NMATS 36
#define ROWS 10000
#define COLS 9

typedef double MAT[NMATS][ROWS][COLS];


void myfunc(void)
{
    MAT* mat = (MAT*)malloc(sizeof(MAT));

    // initialize the matrix by referencing it as `*mat`
    (*mat)[0][0][0] = 0;

    free(mat);
}

但是,如果您坚持需要堆栈分配:

假设sizeof(double)==836*10000*9*sizeof(double) == 25,920,000.因此,您至少需要堆栈空间中的许多字节,再加上一些额外的函数调用和局部变量开销。因此,让我们再加上一百万字节,再把二千七百万字节算起来。

如果您真的坚持要有27 MB的堆栈分配可用。我假设您使用的是Microsoft编译器:

设置链接器选项:/STACK:27000000

以上内容适用于所有Visual项目。

如果您的自定义构建步骤只是cl.exe的一次运行(而不是单独的链接器步骤),则可以让编译器通过/F命令参数转发命令行选项:

代码语言:javascript
复制
cl.exe /F27000000 /Zi /EHsc /Fe: C:\Users\usr\project\c\build\main.exe c:\Users\usr\project\c\src\main.c

https://learn.microsoft.com/en-us/cpp/build/reference/f-set-stack-size?view=msvc-170

https://learn.microsoft.com/en-us/cpp/build/reference/stack-stack-allocations?view=msvc-170

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71363988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档