JIT 编译器和异常处理

rwa*_*ace 4 c++ windows 64-bit exception-handling

在 Windows x64 上,假设有三个函数的调用链:

function A, written in C++
function B, generated by a JIT compiler
function C, written in C++
Run Code Online (Sandbox Code Playgroud)

A 调用 B 调用 C,然后 C 抛出一个被 A 捕获的异常。 B 只是直线代码;它从不抛出或捕获任何异常,也不包含任何析构函数。

http://msdn.microsoft.com/en-us/library/ms235286(v=vs.80).aspx说 B 必须将堆栈对齐到 16 字节,这很好。它还说必须向 B 提供展开数据,但不清楚这些数据应该由什么组成或如何提供。

在这种情况下,其中B并没有真正做任何平仓,它还得有一个空平仓的数据块,或者你可以忽略,并有异常默默传递乙级以上?

arx*_*arx 5

正如本文所解释的,您确实需要展开数据:

即使您只有一个只调用另一个函数的小函数,您仍然需要展开数据,或者当发生异常时,您的进程将被终止。

展开数据格式已记录在案,但相当简洁。