C++ 编译器优化标志:`-O3`, `-Os`, `-flto`, `-fno-exceptions` 的影响与权衡

哈喽,各位好!今天咱们来聊聊C++编译器的优化标志,这玩意儿就像给你的代码打兴奋剂,让它跑得更快,瘦得更苗条。但用不好,也可能把你代码搞抽筋儿。所以,咱们得好好研究一下 -O3, -Os, -flto, 和 -fno-exceptions 这几个常用选项的影响和权衡。 一、-O3: 大力出奇迹,但小心翻车 -O3 就像是编译器界的“大力丸”,它会使出浑身解数,进行最大程度的优化。这通常包括: 循环展开 (Loop Unrolling): 把循环体复制几遍,减少循环的次数。 函数内联 (Function Inlining): 把小函数的代码直接塞到调用它的地方,省去函数调用的开销。 指令调度 (Instruction Scheduling): 重新安排指令的顺序,让CPU的流水线跑得更顺畅。 自动向量化 (Auto-Vectorization): 如果你的代码里有重复的运算,编译器会尝试用SIMD指令(比如SSE、AVX)并行处理,大幅提升性能。 示例:循环展开 假设有这么一段代码: #include <iostream> #include <chrono> in …