MinGW 版本差异及选择

您所在的位置:网站首页 3080ti各版本区别 MinGW 版本差异及选择

MinGW 版本差异及选择

2024-04-07 22:48| 来源: 网络整理| 查看: 265

MinGW 版本差异及选择 MinGW 简介MinGW、 MinGW-w64 区别MinGW-w64 gcc版本区别MinGW 各版本参数说明posix VS win32sjij VS seh VS dwarf

MinGW 简介

MinGW(全称为 Minimalist GNU for Windows),它实际上是将经典的开源 C 语言编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32 API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 平台不具备的,但是 Linux 平台具备的开发工具和 API 函数。用一句话来概括就是:MinGW 就是 GCC 的 Windows 版本;

MinGW、 MinGW-w64 区别

MinGW-w64 原本是 MinGW 项目的分支,后来成为独立发展得项目,由于仅有 MinGW-w64 被 GCC 官方所支持, 而 MinGW 早已停止更新, 因此推荐使用 MinGW-w64; MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成 32 位可执行程序,而 MinGW-w64 则可以编译生成 64 位或 32 位可执行程序。

MinGW-w64 gcc版本区别

MinGW gcc是Windows版本的gcc编译器。各个版本之间存在一定差异。 在这里插入图片描述

MinGW 各版本参数说明

MinGW 可以适应不同系统开发环境,因此有几大参数需要进行选择: Version、Architecture、Threads、Exception

Version:指的是你选择的 GCC 编译器的版本,一般建议选择最新的版本;

Architecture:指的是你的电脑的系统类型,i686 表示的是 32 位的系统类型,x86_64 表示的是 64 位的系统类型;

Threads:指的是线程模型,posix 或 win32;

Exception:指的是异常处理模型。i686 系统架构有两种选择:dwarf 和 sjlj;x86_64 系统架构也有两种选择:seh 和 sjlj

posix VS win32

GCC for Windows带有两个线程模型:win32和posix。

posix(Portable Operating System Interface,可移植操作系统接口),是 UNIX 系统的一个 API 设计标准,很多类 UNIX 系统也在支持兼容这个标准,如 Linux 操作系统。 Win32,是 Windows 系统下一个 API 设计标准。

posix启用 c++11/c11多线程功能。 依赖于 libwinpthreads,即使你不直接调用 API,也将分发给 winpthreads;win32没有C++11多线程功能。因此,只有posix线程模型支持标准的多线程库。threads-posix发行版将使用 posix API并允许使用 std:: thread,threads-win32将使用 win32api,并禁用标准的std::thread 部分。

小结:win32:没有C++ 11多线程特性;posix:支持C ++ 11多线程特性。 如果在 Windows 下开发 Linux 应用程序,则选择 posix; 如果开发 Windows 平台下的应用程序,就需要选择 Win32;

sjij VS seh VS dwarf

在C++中有 try…throw…catch,当它执行这种结构时,它需要保存现场还原现场,而 sjlj,seh,dwarf 正是实现这类过程的三种方式。

sjlj 全称是 SetJump / LongJump,前者设还原点,后者跳到还原点。跨平台,可用于 32 位或者 64 位系统。缺点是:运行速度稍慢

seh(Structured Exception Handling,结构化异常处理)是 Borland 公司的,微软买了其专利使用权,它利用了 FS 段寄存器,将还原点压入栈,收到异常时再弹出。相较而言,sjlj 是 C 标准库就有的东西,seh 在 2014 年前是有专利的,从性能上说 seh 比 sjlj 快。只用于64位系统。

dwarf 一种带调试信息(DWARF- 2(DW2)EH)的包, 所以比一般的包尺寸大,只支持32位系统 – 没有永久的运行时间开销 – 需要整个调用堆栈被启用,这意味着exception不能被抛出,例如Windows系统DLL。

小结: 【x86_64 64位】

1、seh 是新发明的,而 sjlj 则是古老的。只用于64位系统。

2、seh 性能比较好,但不支持 32位。 sjlj 稳定性好,支持 32位和64位。

因此,x86_64 系统架构的推荐使用 seh 的异常处理模型。

【i686 32位】

dwarf 只支持 32 位,而 sjlj 支持 32 位或64 位,但是 dwarf 的性能要优于 sjlj。

因此,i686 系统架构的推荐使用 dwarf 的异常处理模型。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3