解决程序在xp系统总是莫名奇妙的崩溃问题(/Zc:threadSafeInit- )
现象:
程序在xp系统上面总是莫名其妙的崩溃,检查代码看不出任何问题,感觉代码都很好。即使你远程调试,找到了崩溃的点,当你注释了崩溃点之后,还是会崩溃到别的地方。
当你遇到了这种情况的时候,不妨参照一下下面的方法看看,说不定可以解决问题。
如何解决?
将崩溃程序相关的所有工程代码全部关闭全局变量的线程安全检测(TLS),注意!!!是全部工程,比如a.exe崩溃,那么将a工程相关的所有工程全局关闭全局变量的线程安全检测,包括静态库。
如何关闭全局变量的线程安全检测?打开vs工程属性页:属性 -> C / C ++ - >命令行 - >添加“/Zc:threadSafeInit- ”

为什么这样能解决问题?
编译器默认是以线程安全(TLS)去初始化全局变量的,也就是'/Zc:threadSafeInit'(以TLS方式加载会有效率上的优化),但是TLS又需要windows vista及更高的系统支持。早期系统不支持TLS,所以使用tls并没有什么效率上的优化,更糟糕早期系统对TLS的加载数量限制很低,超过TLS限制部分就可能导致崩溃。因此'/Zc:threadSafeInit-'能解决这样的问题。
更为详细的解释可以参照微软的文档:/Zc:threadSafeInit(线程安全的本地静态初始化)