由一次聊天引起的思考,也间接导致了我们项目一个奇怪的Bug。
起因只是朋友在做作业的时候直呼运行缓慢,但仅将Debug
模式更改为Release
模式,运行效率却有了质的飞跃。这让我非常的疑惑,就本人一直以来的经验来看,无论如何两种模式效率都不可能差距如此之大,这让我产生了些许好奇。
这是视频:
Debug:
Video edited on Kapwing
Release:
Video edited on Kapwing
其实答案很简单,就是MSVC对于Debug模式链接了一套专门用于Debug的libc/runtime, 用于添加部分调试信息和一些编译器检查(比如典中典的边界检查)。
(因为没有Windows没法截libcd的图了,斯密马赛!)
简单的一些内存添加:(出自侯捷老师的课👀)
当然在Linux中是不存在其他libc的。一个libc走天下。
其实本来到这里本篇文章就应该结束了,但正是因为SB至极的MSVC对于这两种模式的区分导致在遇到CMake的跨平台时候需要多对MSVC进行一步操作。
众所周知,${CMAKE_CURRENT_BINARY_DIR}
能获取编译后文件的地址,可偏偏MSVC不走寻常路,下面又加了个文件夹Debug/Release,导致路径得单独判断。
顺便一提这个Debug和Release其实不是由${CMAKE_BUILD_TYPE}
判断的,而是通过Toolchain里面选择Release或者Debug(是Toolchain决定type),选的哪个${CMAKE_BUILD_TYPE}
就会是哪个(仅限MSVC)。
本文作者:xmmmmmovo
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 许可协议。转载请注明出处!