0

有没有办法在不削弱 SEH 的情况下摆脱 Win32 的“一大堆”模型?我希望能够在堆上分配堆栈帧,作为实现协程的一种方式。然而,我的代码目前依赖于 SEH,这篇文章,几页下来,说(关于异常处理程序的遍历,扫描,强调我的):

在这个链遍历期间,操作系统对损坏的堆栈非常偏执。它检查所有链条目是否在堆栈的范围内。(这些界限也记录在 TEB 中)。操作系统还检查所有条目在堆栈上是否按升序排列。如果您违反这些规则,操作系统将认为堆栈已损坏并且将无法处理异常。这是 Win32 应用程序不能将其堆栈分成多个不相交的段作为处理堆栈溢出的创新技术的原因之一。

所以基本上,如果当前堆栈帧在“一个大堆栈”之外时发生异常,则该进程将立即终止。不理想的行为。

有没有人能够解决这个问题并在本机 Win32 应用程序中使用带有不相交堆栈的 SEH?此外,是否还有其他 Win32 特定的“陷阱”具有不相交的堆栈?

4

1 回答 1

2

纤维被专门添加到 Win32 以支持这一点。从这里开始阅读......也 请查看这篇警示性博客文章

于 2010-03-01T17:06:03.403 回答