之前还有一些没发完的存货,这次再发一点
在下载MinGW发行版时,经常可以看到类似下图的版本选择页面:
那么同一段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()构成,它们可以在用户空间实现程序中任意位置的相互跳转,从而实现异常处理、协程等特性。
在下载MinGW发行版时,经常可以看到类似下图的版本选择页面:
那么同一段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()构成,它们可以在用户空间实现程序中任意位置的相互跳转,从而实现异常处理、协程等特性。