c – 如果我取消引用空指针,为什么操作系统不会崩溃?
发布时间:2020-12-16 10:51:01 所属栏目:百科 来源:网络整理
导读:取消引用空指针会导致未定义的行为.在实践中,它通常意味着我的程序会崩溃.但为什么操作系统不会崩溃?因为如果我的程序取消引用空指针,并且我的程序由操作系统运行,那么,根据逻辑传递性规则,这意味着操作系统试图取消引用空指针.为什么OS不进入“未定义行为
取消引用空指针会导致未定义的行为.在实践中,它通常意味着我的程序会崩溃.但为什么操作系统不会崩溃?因为如果我的程序取消引用空指针,并且我的程序由操作系统运行,那么,根据逻辑传递性规则,这意味着操作系统试图取消引用空指针.为什么OS不进入“未定义行为”状态?
解决方法
C标准没有定义行为,要么保证崩溃,要么做其他任何事情.这并不妨碍OS定义行为 – 它不是C程序,因此它不必遵守C程序的“规则”[1].即便如此,操作系统也不会取消引用指针本身.
在大多数现代平台上,访问解除引用指针的目标将导致内存管理硬件引发异常(通常称为“分段故障”或“保护故障”).这是由内核捕获的,内核可以确定执行哪个进程,并且终止进程或向其发送信号. 因此,在这样的平台上,取消引用空指针的进程的默认行为将是崩溃;操作系统本身没有任何理由崩溃. [1]我指的是非正式的“规则”,即程序应该格式良好并避免未定义的行为 – 不要与语言标准指定的C实现的正式“规则”混淆. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |