【发布时间】:2012-08-13 23:12:25
【问题描述】:
如果我知道我的程序中的特定 extern "C" 函数(例如,RaiseException)是引发 SEH 异常的唯一函数,并且我希望它们转换为 C++ 异常,我有什么办法可以“选择性地为该函数启用“/EHa,以便将异常转换为CStructured_Exception,而不会像normally caused by /EHa一样膨胀或减慢程序的其余部分?
【问题讨论】:
-
不,它需要在呼叫站点处于活动状态。提供证据证明这两条 cpu 指令真的会减慢您的代码速度。早就淘汰了。现在的“天哪,烂泥”是一场没有功劳的钓鱼探险。
-
@HansPassant:微软 itself 说(甚至在 VS 2012 文档中) "
/EHa可能会导致图像性能降低,因为编译器不会优化即使编译器没有看到throw",try也一样积极地阻止,而且我认为他们这样说并没有犯错(请随时纠正我)。至于代码膨胀(没有提到),这是真实的:使用/EHa,我的可执行文件大约增加了 10-20%。我从来没有说过它“糟透了”(见鬼,至少/EHa是可用的),我只是发现没有必要为我不使用的东西膨胀我的可执行文件。
标签: winapi visual-c++ seh structured-exception