之前还有一些没发完的存货,这次再发一点![](http://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
在下载MinGW发行版时,经常可以看到类似下图的版本选择页面:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=4ec10089923f8794d3ff4826e21b0ead/e75b738da97739126f9f6650be198618367ae21b.jpg?tbpicau=2024-07-02-05_2b6610354dc5bfb337ac54525c7c42ea)
那么同一段MinGW源码,内部版本号相同,为什么会有这么多不同的发行版本呢?它们又都代表什么意思呢?
这三段字符的含义是架构-线程模型-异常处理模型,它们分别有下面几种不同的选择:
1.架构:x86_64和i686,分别代表64位编译组件和32位编译组件,它们分别编译64位和32位的程序。
2.线程模型:posix和win32,posix线程模型也就是pthread,win32线程模型也就是Windows原生线程,CreateThread或_beginthread创建的线程。
3.异常处理模型:sjlj, dwarf和seh,其中seh是Windows原生的结构化异常处理,只能用于64位程序;drawf移植自linux,只能用于32位程序(Windows),而sjlj两种架构都可用。
今天要介绍的是异常处理模型中的sjlj,全称是setjmp/longjmp,由两个函数setjmp()和longjmp()构成,它们可以在用户空间实现程序中任意位置的相互跳转,从而实现异常处理、协程等特性。
![](http://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
在下载MinGW发行版时,经常可以看到类似下图的版本选择页面:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=4ec10089923f8794d3ff4826e21b0ead/e75b738da97739126f9f6650be198618367ae21b.jpg?tbpicau=2024-07-02-05_2b6610354dc5bfb337ac54525c7c42ea)
那么同一段MinGW源码,内部版本号相同,为什么会有这么多不同的发行版本呢?它们又都代表什么意思呢?
这三段字符的含义是架构-线程模型-异常处理模型,它们分别有下面几种不同的选择:
1.架构:x86_64和i686,分别代表64位编译组件和32位编译组件,它们分别编译64位和32位的程序。
2.线程模型:posix和win32,posix线程模型也就是pthread,win32线程模型也就是Windows原生线程,CreateThread或_beginthread创建的线程。
3.异常处理模型:sjlj, dwarf和seh,其中seh是Windows原生的结构化异常处理,只能用于64位程序;drawf移植自linux,只能用于32位程序(Windows),而sjlj两种架构都可用。
今天要介绍的是异常处理模型中的sjlj,全称是setjmp/longjmp,由两个函数setjmp()和longjmp()构成,它们可以在用户空间实现程序中任意位置的相互跳转,从而实现异常处理、协程等特性。