在Java中会有一个堆栈跟踪,StackOverflowError
并且整个系统不会崩溃,只有程序.
在C中,我知道超出范围的数组索引会产生分段错误.对于C中的堆栈溢出是否相同,并且还存在分段错误,即类似问题的错误类型相同?
我没有测试C中有意识的无限复活,看看会发生什么,因为我不知道后果.
或者它有时是更糟糕的事情,C中的堆栈溢出可能会导致操作系统故障并迫使您重新启动电源以便返回?或者更糟糕的是,造成不可逆转的硬件损坏?堆栈溢出错误有多糟糕的影响?
很明显,Java中的保护比C中更好.在C中是否比在汇编/机器代码中更好,或者它在C中作为汇编实际上是否相同(缺乏)保护?
在C中,我知道超出范围的数组索引会产生分段错误.对于C中的堆栈溢出是否相同,并且还存在分段错误,即类似问题的错误类型相同?
C中无法保证会出现分段错误.C标准表明它是未定义的行为,并将其留在那里.它可能表现出来,取决于实现/平台.
或者它有时是更糟糕的事情,C中的堆栈溢出可能会导致操作系统故障并迫使您重新启动电源以便返回?或者更糟糕的是,造成不可逆转的硬件损坏?堆栈溢出错误有多糟糕的影响?
在现代操作系统中,很少有任何不幸发生在系统上; 通常,只有程序会崩溃.现代操作系统使用各种存储器保护技术.
很明显,Java中的保护比C中更好.在C中是否比在汇编/机器代码中更好,或者它在C中作为汇编实际上是否相同(缺乏)保护?
那是因为在Java中,内存是"被管理的".在C中,它留给程序员; 这是设计的.AC编译器最终生成机器代码; 所以它不会更好或更糟.显然,一个好的编译器可以检测到其中的一些问题并警告你,这与C语言相比是一个优势.