gpt4 book ai didi

C:太大的堆栈会导致段错误吗?

转载 作者:行者123 更新时间:2023-12-03 16:36:09 26 4
gpt4 key购买 nike

最近调试了一个很奇怪的问题,导致了segmentation fault。

基本上,在我将几个被声明为局部变量的非常大的数组移动到全局变量后,问题就消失了,这意味着据我所知,我将它们从堆栈移动到了堆空间。没有其他任何改变。段错误本身出现在非常旧且稳定的代码中,这些代码也被其他没有遇到任何段错误的程序共享。

总的来说,这些阵列的大小约为 1.5 MB。

过大的堆栈是否可能通过覆盖/弄乱函数指针而导致段错误?

我的感觉是这样的事情应该被编译器捕获,但我绝对没有其他方法来解释这种行为。

平台为 Linux (Ubuntu 18.04)

最佳答案

程序的堆栈大小是有限的,因此将过多的大数组声明为局部变量会导致堆栈溢出。你所做的是处理问题的好方法。

这不是编译器通常会检查的内容,因为堆栈大小在运行时由操作系统控制,例如 ulimit -sgetrlimit/setrlimit在 Linux 系统上。 man page for getrlimit 关于堆栈大小的说明如下:

RLIMIT_STACK

The maximum size of the process stack, in bytes. Upon reaching this limit, a SIGSEGV signal is generated. To handle this signal, a process must employ an alternate signal stack (sigaltstack(2)).



因此,在 Linux 上,堆栈的大小是一个运行时设置,超出堆栈会显式导致分段违规。

关于C:太大的堆栈会导致段错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60707151/

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