当前位置:  开发笔记 > 编程语言 > 正文

由于堆栈溢出,C中通常会发生什么?

如何解决《由于堆栈溢出,C中通常会发生什么?》经验,为你挑选了1个好方法。

在Java中会有一个堆栈跟踪,StackOverflowError并且整个系统不会崩溃,只有程序.

在C中,我知道超出范围的数组索引会产生分段错误.对于C中的堆栈溢出是否相同,并且还存在分段错误,即类似问题的错误类型相同?

我没有测试C中有意识的无限复活,看看会发生什么,因为我不知道后果.

或者它有时是更糟糕的事情,C中的堆栈溢出可能会导致操作系统故障并迫使您重新启动电源以便返回?或者更糟糕的是,造成不可逆转的硬件损坏?堆栈溢出错误有多糟糕的影响?

很明显,Java中的保护比C中更好.在C中是否比在汇编/机器代码中更好,或者它在C中作为汇编实际上是否相同(缺乏)保护?



1> usr..:

在C中,我知道超出范围的数组索引会产生分段错误.对于C中的堆栈溢出是否相同,并且还存在分段错误,即类似问题的错误类型相同?

C中无法保证会出现分段错误.C标准表明它是未定义的行为,并将其留在那里.它可能表现出来,取决于实现/平台.

或者它有时是更糟糕的事情,C中的堆栈溢出可能会导致操作系统故障并迫使您重新启动电源以便返回?或者更糟糕的是,造成不可逆转的硬件损坏?堆栈溢出错误有多糟糕的影响?

在现代操作系统中,很少有任何不幸发生在系统上; 通常,只有程序会崩溃.现代操作系统使用各种存储器保护技术.

很明显,Java中的保护比C中更好.在C中是否比在汇编/机器代码中更好,或者它在C中作为汇编实际上是否相同(缺乏)保护?

那是因为在Java中,内存是"被管理的".在C中,它留给程序员; 这是设计的.AC编译器最终生成机器代码; 所以它不会更好或更糟.显然,一个好的编译器可以检测到其中的一些问题并警告你,这与C语言相比是一个优势.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有