2023-03-09
study
00

目录

起因
答案
Bug

由一次聊天引起的思考,也间接导致了我们项目一个奇怪的Bug。

起因

起因只是朋友在做作业的时候直呼运行缓慢,但仅将Debug模式更改为Release模式,运行效率却有了质的飞跃。这让我非常的疑惑,就本人一直以来的经验来看,无论如何两种模式效率都不可能差距如此之大,这让我产生了些许好奇。

image-20230308205942788

image-20230308210004516

这是视频:

Debug:

Video edited on Kapwing

Release:

Video edited on Kapwing

答案

其实答案很简单,就是MSVC对于Debug模式链接了一套专门用于Debug的libc/runtime, 用于添加部分调试信息和一些编译器检查(比如典中典的边界检查)。

image-20230308215811163

(因为没有Windows没法截libcd的图了,斯密马赛!)

简单的一些内存添加:(出自侯捷老师的课👀)

image-20230308210907499

当然在Linux中是不存在其他libc的。一个libc走天下。

image-20230308213750193

Bug

其实本来到这里本篇文章就应该结束了,但正是因为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)。

如果对你有用的话,可以打赏哦
打赏
logo ali pay
logo wechat pay

本文作者:xmmmmmovo

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 许可协议。转载请注明出处!