分类
C++ GCC

MinGW中的两组头文件(c++/和c++/tr1/)

今天在搜索cstdio文件时发现有两个,分别位于

mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++
mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\tr1

唯一的区别只是后者在这个tr1的子文件夹下.
什么是tr1?

C++ TR1 是ISO/IEC TR 19768 C++ Library Extensions(函式库扩充)的一般名称。TR1 是一份文件,内容提出了对C++标准函式库的追加项目。这些追加项目包括了正则表达式、智能指针、哈希表、随机数生成器等。TR1自己并非标准,他是一份草稿文件。然而他所提出的项目很有可能成为下次的官方标准。这份文件的目标在于「为扩充的C++标准函式库建立更为广泛的现成实作品」。
C++ tr1是针对C++标准库的第一次扩展。即将到来的下一个版本的C++标准c++0x会包括它,以及一些语言本身的扩充。tr1包括大家期待已久的smart pointer,正则表达式以及其他一些支持范型编程的内容。草案阶段,新增的类和模板的名字空间是std::tr1。

经过测试,一般情况下编译器调用的是前者的头文件.

分类
GCC

mingw-w64:seh还是sjlj?

SJLJ(setjmp / longjmp):

可用于32位和64位
而不是“零成本”:即使没有抛出异常,也会导致轻微的性能损失(异常重代码中约为15%)但有时可能会受到惩罚更重要的是:https://bugreports.qt-project.org/browse/QTBUG-29653
允许例外遍历例如Windows回调

DWARF(DW2,dwarf-2)

仅可用于32位
没有永久运行时开销
需要整个调用堆栈要启用dwarf,这意味着不能抛出异常,例如Windows系统DLL。

SEH(零开销异常)

将适用于64位GCC 4.8。
rubenvb发布可用[sourceforge.net]目标Win64 / Personal Builds / rubenvb / gcc-4.8-release / x86_64-w64-mingw32-gcc-4.8.0-win64_rubenvb.7z /下载
MinGW-builds发布可用[sourceforge.net ] 

推荐使用SEH

分类
GCC

mingw-w64:win32还是posix?

GCC附带了一个编译器运行时库(libgcc),它用于(除其他外)为其支持的语言中的多线程相关功能提供低级OS抽象。最相关的例子是的libstdc ++的C ++ 11 ,不具有完全实现时,GCC在其内部的Win32线程模型建立。MinGW-w64提供了一个winpthreads(在Win32多线程API之上的pthreads实现),GCC可以将其链接到其中以启用所有奇特的功能。

我必须强调这个选项并不禁止你编写你想要的任何代码(它对你可以在代码中调用的API 完全没有影响)。它只反映了GCC的运行时库(libgcc / libstdc ++ / …)用于其功能。

总结一下:

posix:启用C ++ 11 / C11多线程功能。使libgcc依赖于libwinpthreads,这样即使你不直接调用pthreads API,你也会分发winpthreads DLL。在您的应用程序中再分发一个DLL没有任何问题。
win32:没有C ++ 11多线程功能。
对调用Win32 API或pthreads API的任何用户代码都没有影响。你可以随时使用两者。