如果发生堆栈溢出陷阱,我希望控制器:
我想知道在开始此异常处理之前重置堆栈指针是否是一个好主意,以确保在不弄乱内存的情况下完成该过程,或者是否有更好的方法来处理此异常?
答案 0 :(得分:0)
堆栈溢出异常并不意味着任何错误还据我记忆我早期编程的早期C167(我认为xe166来自)。它只是意味着你在堆栈的最后。事实上,如果有足够的jiggery pokery,您可以使用堆栈溢出和堆栈下溢异常来“覆盖”更大的堆栈进出主内存!
因此,如果您可以确保异常处理程序不需要进一步堆栈,那么您可以在不重置SP的情况下逃脱。你可能会从它调用一些函数,虽然我想,在这种情况下有一些免费的堆栈空间可能会有用:)
关于“混乱堆栈”的评论不是问题 - 一旦堆栈指针到达终点,任何进一步的堆栈使用会混淆其他东西,这可能是您的异常代码将要进行的数据依靠。听起来你必须保证重置发生,但是你开始用错误的SP破坏内存,你无法预测会发生什么。
因此,如果它是一个远程关键系统,找到一种方法来为“紧急堆栈”提供内存,然后在继续使用异常处理程序之前将SP指向该内存。