在 Windows x64 上,假设存在三个函数的调用链:
function A, written in C++
function B, generated by a JIT compiler
function C, written in C++
A 调用 B 调用 C,然后 C 抛出由 A 捕获的异常。 B 只是直线代码;它从不抛出或捕获任何异常,也不包含任何析构函数。
http://msdn.microsoft.com/en-us/library/ms235286(v=vs.80).aspx说 B 必须保持堆栈对齐到 16 个字节,这很好。它还说必须为 B 提供展开数据,但不清楚这些数据应该包含什么或如何提供它。
在这种情况下,B实际上不必进行任何展开,它是否仍然必须有一个空的展开数据块,或者您可以忽略它并让异常静默传递 B?