先上图展示下忘记调整优化选项带来的差异……

不带任何优化相关选项(-O0)
指定-O3后的运行效果

产生如此不同运行时间差异的原因主要在于在O0级别和O3级别中的优化选项差异。

引用vczh的回答:

C++的template就设计成,只要你开了优化就可以把封装带来的中间层去掉的形式。因此STL拼命的抽象,然后你开了O2,这些抽象编译后就“不占地方”了,就跟你直接用C为每个类型精心设计的容器类型一样。当然C++显然方便多了。但是你不开O2,你就能感受到那些抽象带来的效果。

作者:vczh
链接:https://www.zhihu.com/question/27090458/answer/35224898
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

-O等同于-O0,不采用优化。

-O1是在不影响编译速度的前提下开启一部分可能的优化。

-O2是接受编译速度减慢的情况下在O1基础上开更多优化。采用几乎所有对target architecture可用的优化。

-O3在O2的基础上进一步优化,一般是引入向量化指令进行编译。可能以增加目标文件大小为代价。

-Os是在O2的基础上,尽可能缩小目标文件的大小,和O3目的相反。

-Ofast是在O3基础上,可能不遵循一些语言标准进行更激进的优化。

-Og是挑选部分和-g不冲突的优化选项,尽可能同时满足优化和调试信息的需求。