我找不到足够的信息来决定我应该使用哪个编译器来编译我的项目。在不同的计算机上有几个程序模拟一个过程。在Linux上,我用GCC。一切都很好。我可以优化代码,它编译速度快,使用的内存不多.
我用MSVC和GCC编译器做我自己的基准测试。稍后,将生成速度稍快的二进制文件(针对每个子体系结构)。尽管编译时间要比MSVC长得多。
所以我决定使用MinGW。但是无法找到任何关于异常处理方法及其在MinGW中的实现的解释。我可以为不同的操作系统和架构使用不同的发行版。
考虑因素:
发布于 2013-03-28 15:03:34
在MinGW-w64 Wiki有一个简短的概述
-w64 gcc为什么不支持Dwarf-2异常处理? Windows的Dwarf-2 EH实现根本不适合在64位Windows应用程序下工作。在win32模式下,异常解除处理程序不能通过非DW2识别代码传播,这意味着任何通过任何非DW2感知的“外部框架”代码的异常都将失败,包括用Visual构建的和DLL。gcc中的矮人-2展开码检查x86解卷程序,如果没有其他矮人-2解卷信息,则无法进行。 异常处理的SetJump LongJump方法在大多数情况下都适用于win32和win64,但一般保护故障除外。gcc正在开发结构化异常处理支持,以克服dw2和sjlj的缺陷。在win64上,展开信息被放置在xdata-节中,并且有.pdata (函数描述符表)而不是堆栈。对于win32,处理程序链在堆栈中,需要通过实际执行的代码保存/恢复。
关于异常处理的GCC GNU
GCC支持两种异常处理(EH)方法:
..。
结构化异常处理(SEH)
Windows使用自己的异常处理机制,称为结构化异常处理(SEH)。..。不幸的是,GCC还不支持SEH。..。
另请参阅:
发布于 2013-03-27 21:55:02
SJLJ (setjmp/longjmp):--可用于32位和64位--而不是“零成本”:即使没有引发异常,也会造成轻微的性能损失(异常重代码为15%)允许异常通过例如windows回调进行遍历。 侏儒 (DW2,侏儒-2)--只有32位才能使用--不需要永久的运行时开销--需要整个调用堆栈才能实现矮化,这意味着不能在Windows上抛出异常。 SEH (零开销例外)-将提供64位GCC 4.8.
https://stackoverflow.com/questions/15670169
复制相似问题