在 Windows x64 上,假设有一个包含三个函数的调用链:
function A, written in C++
function B, generated by a JIT compiler
function C, written in C++
A 调用 B,B 调用 C,然后 C 抛出一个被 A 捕获的异常。B 只是直线代码;它从不抛出或捕获任何异常,也不包含任何析构函数。
http://msdn.microsoft.com/en-us/library/ms235286(v=vs.80).aspx说 B 必须使堆栈对齐到 16 个字节,这很好。它还说必须向 B 提供展开数据,但不清楚该数据应包含什么或如何提供。
在这种情况下 B 实际上不需要进行任何展开,它是否仍然必须有一个空的展开数据 block ,或者您可以忽略它并让异常静默地传递给 B ?
最佳答案
您确实需要展开数据 as this article explains :
even if you just have a tiny little function that only calls another function, you still need unwind data, or when an exception occurs, your process will simply be terminated.
关于c++ - JIT 编译器和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15405550/