c - 在C中调用函数时,是否使用了操作系统的堆栈,堆栈的大小是否固定?

标签 c function memory segmentation-fault stack

这是我的代码

#include<stdio.h>
#define ROW 10000
#define COLUMN 10000
void hello(int arr[ROW][COLUMN]){
    printf("hoho");
}
void main(){
    int arr[ROW][COLUMN];
    hello(arr);
}

现在,这给了我段错误。我的问题是,我知道在进行函数调用时,堆栈用于保存传递给函数的所有变量。那么这是操作系统的堆栈吗?即操作系统是否有专门为此设计的单独内存块?

还有,栈的大小是固定的吗?

如果我必须将这么大的值传递给我的函数怎么办?

最佳答案

操作系统的所有任务都有一个单独的堆栈。如果你能如此轻易地破坏操作系统内存,那就太糟糕了。
根据您的编译器,您通常有大约 1 MiB 的堆栈内存。如果您需要使用如此大量的内存,请使用 malloccalloc 从堆中分配内存。

编辑

This是 Windows 内存布局的样子。
Here是关于这个的文章。

关于c - 在C中调用函数时,是否使用了操作系统的堆栈,堆栈的大小是否固定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16296138/

相关文章:

c - 双重自由或腐败的原因

Java SSLSocket 握手失败

javascript - 在 Javascript 中是否有等同于 .apply 的东西不会改变 this 的值?

Java 进程内存远大于指定的限制

ios - 有向/间接图内存管理?

c - 仅使用位运算的整数左侧连续的个数

c - 测试功能不工作 C 编程

objective-c - Objective C 类方法与 C 函数

javascript - Trigger.io:函数中的 forge.prefs 变量作用域

c# - 在 C# 中分配 "unmanaged"内存