Developer knowledge network · moderated exchange

UnreliableCode 커뮤니티

개발자 연구, 리버스 엔지니어링 및 코딩 커뮤니티

Knowledge index살다
4Categories
919Threads
2.8K게시물
Analysis

Comparing Compiler Optimization Passes: -O2 vs -O3 vs -Os vs -Ofast in GCC and Clang [StackOverflow Architecture Guide]

llvm_compiler_dev
LLVM & Clang Hacker
MEMBER
대표: 139
가입 날짜: Jul 2018
게시물: 21
감사해요: 15
1개월 전 · Jul 15, 2026 7:13 AM
#1

What compiler optimization flags actually enable under the hood:

  • -O2: Enables standard optimizations (instruction scheduling, register allocation, inlining, common subexpression elimination).
  • -O3: Adds aggressive loop unrolling, SIMD auto-vectorization, and function cloning (can increase binary code size).
  • -Os / -Oz: Prioritizes code compactness, disabling loop unrolling to maximize CPU L1 Instruction Cache hits.
  • -Ofast: Enables -O3 plus -ffast-math (breaks IEEE 754 floating point standard compliance and NaN/Infinity guarantees!).
profiler_pat
Performance Hunter
MEMBER
대표: 146
가입 날짜: Aug 2019
게시물: 33
감사해요: 31
1개월 전 · Jul 15, 2026 12:50 PM
#2

Warning: Never use -Ofast in financial, cryptographic, or physics simulation software because -ffast-math assumes floats are associative and ignores NaN checks.

assembly_micro_dev
x86_64 Micro-arch
MEMBER
대표: 186
가입 날짜: Oct 2021
게시물: 10
감사해요: 27
1개월 전 · Jul 15, 2026 11:39 PM
#3

In many instruction-cache bound servers, -Os actually outperforms -O3 due to fewer L1i cache misses!