如果我们不将缓冲区声明为 C 中的全局变量,为什么会发生堆栈溢出?

Why does stack overflow occur if we do not declare our buffer as a global variable in C?

刚在某处读到,

when large buffers are used they must be made global variables otherwise stack overflow occurs.

但我不明白为什么会这样?

(这适用于 windows 上的 C 语言编译器 Turbo C)。

全局变量不在栈上分配——它们在可执行文件的读写部分,因此不会导致栈溢出。

通常,可执行文件头和 OS 加载器对最大堆栈大小的限制低于对 global/static 数据的限制。

您的链接器负责组装可执行文件头,并且可能会指示为可执行映像设置更大(或更小)的最大堆栈大小,因此您可以指示链接器提高该限制以适应您的大缓冲区。

如果您需要大缓冲区并且不想增加最大堆栈,您可以在运行时动态分配缓冲区 space。

您应该考虑的最后一个选项是使用 statics/globals。这样的 code/data 不是可重入的,因此不是线程安全的:(