如果发生堆栈溢出陷阱,我希望控制器执行以下操作:


发送消息以通知用户发生堆栈溢出
发送消息后进行重置


我想知道在开始此异常处理之前重置堆栈指针是否是一个好主意,以确保该过程将在不浪费内存的情况下完成,或者是否有更好的方法来处理此异常?

最佳答案

就我从早期编程早期的C167(我认为xe166源自此)的回忆起,栈溢出异常并不意味着有任何错误。这只是意味着您在堆栈的末尾。确实,有了足够的拼图扑克,您就可以使用堆栈溢出和堆栈下溢异常来“分页”更大的堆栈,使其进入和退出主内存!

因此,如果您可以确保自己自己不需要异常处理程序,则无需重置SP即可。我想您可能会从中调用一些函数,在这种情况下,拥有一些可用的堆栈空间可能是有用的:)

您对“陷入困境的堆栈”的评论并不完全是问题-堆栈指针到达末尾时,任何进一步的堆栈使用情况都会搞乱其他情况,这可能是您的异常代码将依赖的数据。听起来您必须确保会发生重置,但是如果您使用错误的SP开始破坏内存,您将无法预测会发生什么。

因此,如果它是远程关键系统,请找到一种为“紧急堆栈”提供内存的方法,然后将SP指向该内存,然后再继续执行异常处理程序。

关于c - 堆栈溢出异常处理XE166,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6110498/

10-12 00:24
查看更多