C++ 优化 debug 模式下的运行速度和内存占用
项目中如果使用了大量的 STL 类型,会发现 release 模式比 debug 模式的运行速度快了几十倍甚至上百倍,内存占用页少了很多。造成这个问题的原因在于 STL 库在 debug 模式下会做很多检查,且 debug 模式默认不开启任何优化。
其实办法很简单,分两个步骤:
一、定义 _ITERATOR_DEBUG_LEVEL 宏
宏 _ITERATOR_DEBUG_LEVEL 控制着检查迭代器和调试迭代器支持是否开启。在 debug 和 release 模式下有着不同的默认定义。
如果无所谓 STL 的迭代器调试,在导入任何 STL 库之前定义 _ITERATOR_DEBUG_LEVEL 为 0 即可,禁用后 debug 模式的运行速度将大大提升。
注意:如果有多个项目互相调用,必须在每个项目中都定义该宏,否则会产生不可预料的异常。
补充:在编译 boost 库时,debug 模式默认编译出来的 lib 无法与 debug 模式下将 _ITERATOR_DEBUG_LEVEL定义为 0 的项目混合编译,这种情况下需要在编译 boost 库时指定宏 _ITERATOR_DEBUG_LEVEL = 0 的定义(参见:https://www.boost.org/doc/libs/1_71_0/doc/html