gpt4 book ai didi

c++ - 为什么堆栈溢出导致总线错误 10 而不是段错误

转载 作者:行者123 更新时间:2023-11-30 02:14:43 25 4
gpt4 key购买 nike

谁能解释为什么递归调用期间堆栈溢出会导致总线错误而不是段错误(Mac OS)?

我有一个函数被递归调用了几千次。正如我所料,它达到了堆栈限制,但在其他情况下导致了段错误,这是合乎逻辑的,但为什么是总线错误 10?据我所知,引用未对齐的内存会导致总线错误,但为什么在达到堆栈限制时会出现这种情况?

最佳答案

总线错误和分段违规均由程序访问不应访问的内存引起,但它们会被不同的机制检测到并发出信号。

详细信息因操作系统而异。以下观察或多或少是 unix 主机的情况。

如果操作系统检测到一个进程正在访问操作系统尚未分配给该进程的内存(例如,分配给另一个进程),它会向违规进程发送一个 SIGSEGV 信号。然后进程/程序终止,报告分段违规。

但是,如果硬件检测到对物理上不存在的硬件资源的访问,则会引发操作系统捕获的硬件故障,操作系统会向执行违规指令的进程发送 SIGBUS 信号。这也可能发生在未对齐的内存访问中 - 硬件故障被引发,被操作系统捕获,操作系统向原始进程发送信号。

虽然细节有所不同(例如,操作系统或内核如何响应硬件故障,或者它向违规进程发送什么信号),但总体思路是相似的。

关于c++ - 为什么堆栈溢出导致总线错误 10 而不是段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57287267/

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