11.1๋ ๊ฐ์ ๊ฐ๋ฐ ๋์ ์๋ก์ด GCC 11.x ๋ถ๊ธฐ์ ์ฒซ ๋ฒ์งธ ์ค์ํ ๋ฆด๋ฆฌ์ค์ธ ๋ฌด๋ฃ GCC 11.0 ์ปดํ์ผ๋ฌ ์ ํ๊ตฐ์ ๋ฆด๋ฆฌ์ค๊ฐ ๋ฆด๋ฆฌ์ค๋์์ต๋๋ค. ์๋ก์ด ๋ฆด๋ฆฌ์ค ๋ฒํธ ์ง์ ์ฒด๊ณ์ ๋ฐ๋ผ ๋ฒ์ 11.1์ ๊ฐ๋ฐ ์ค์ ์ฌ์ฉ๋์์ผ๋ฉฐ GCC 12.0 ๋ฆด๋ฆฌ์ค ์ง์ ์ GCC 12.1 ๋ถ๊ธฐ๊ฐ ์ด๋ฏธ ๋ถ๊ธฐ๋์์ผ๋ฉฐ ์ฌ๊ธฐ์์ GCC XNUMX์ ๋ค์ ์ค์ํ ๋ฆด๋ฆฌ์ค๊ฐ ๊ตฌ์ฑ๋ฉ๋๋ค.
GCC 11.1์ ๊ธฐ๋ณธ์ ์ผ๋ก DWARF 5 ๋๋ฒ๊ทธ ํ์ผ ํ์์ ์ฌ์ฉํ๋๋ก ์ ํํ๊ณ C++17 ํ์ค("-std=gnu++17")์ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจํ๋ฉฐ C++20์ ๋ํ ์ง์์ด ํฌ๊ฒ ๊ฐ์ ๋ ๊ฒ์ผ๋ก ์ ๋ช ํฉ๋๋ค. ํ์ค, C++23์ ๋ํ ์คํ์ ์ง์, ํฅํ C ์ธ์ด ํ์ค(C2x)๊ณผ ๊ด๋ จ๋ ๊ฐ์ , ์๋ก์ด ์ฑ๋ฅ ์ต์ ํ.
์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ :
- C++ ์ธ์ด์ ๊ธฐ๋ณธ ๋ชจ๋๋ ์ด์ ์ ์ ๊ณต๋ C++17 ๋์ C++17 ํ์ค(-std=gnu++14)์ ์ฌ์ฉํ๋๋ก ์ ํ๋์์ต๋๋ค. ๋ค๋ฅธ ํ ํ๋ฆฟ์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๋ ํ ํ๋ฆฟ์ ์ฒ๋ฆฌํ ๋ ์๋ก์ด C++17 ๋์์ ์ ํ์ ์ผ๋ก ๋นํ์ฑํํ ์ ์์ต๋๋ค(-fno-new-ttp-matching).
- AddressSanitizer ๋๊ตฌ์ ํ๋์จ์ด ๊ฐ์์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ก์ธ์คํ๊ณ , ํ ๋น๋ ๋ฒํผ์ ๊ฒฝ๊ณ๋ฅผ ๋์ด์๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์์ ์ ๊ธฐํ ์ ํ์ ์ค๋ฅ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ํ๋์จ์ด ๊ฐ์์ ํ์ฌ AArch64 ์ํคํ ์ฒ์์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ Linux ์ปค๋์ ์ปดํ์ผํ ๋ ์ฌ์ฉํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ์ฌ์ฉ์ ๊ณต๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ๊ตฌ์ถํ ๋ AddressSanitizer ํ๋์จ์ด ๊ฐ์์ ํ์ฑํํ๊ธฐ ์ํด "-fsanitize=hwaddress" ํ๋๊ทธ์ ์ปค๋ ํ๋๊ทธ "-fsanitize=kernel-hwaddress"๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ๋๋ฒ๊น ์ ๋ณด ์์ฑ ์ ๊ธฐ๋ณธ์ ์ผ๋ก DWARF 5 ํ์์ด ์ฌ์ฉ๋๋๋ฐ, ์ด๋ ์ด์ ๋ฒ์ ์ ๋นํด 25% ๋ ์ปดํฉํธํ ๋๋ฒ๊น ๋ฐ์ดํฐ ์์ฑ์ด ๊ฐ๋ฅํ๋ค. DWARF 5๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํ๋ ค๋ฉด ์ต์ํ binutils ๋ฒ์ 2.35.2๊ฐ ํ์ํฉ๋๋ค. DWARF 5 ํ์์ GDB 8.0, valgrind 3.17.0, elfutils 0.172 ๋ฐ dwz 0.14๋ถํฐ ๋๋ฒ๊น ๋๊ตฌ์์ ์ง์๋ฉ๋๋ค. ๋ค๋ฅธ ๋ฒ์ ์ DWARF๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฒ๊ทธ ํ์ผ์ ์์ฑํ๋ ค๋ฉด "-gdwarf-2", "-gdwarf-3" ๋ฐ "-gdwarf-4" ์ต์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- GCC๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ปดํ์ผ๋ฌ์ ๋ํ ์๊ตฌ ์ฌํญ์ด ์ฆ๊ฐํ์ต๋๋ค. ์ด์ ์ปดํ์ผ๋ฌ๋ C++11 ํ์ค(์ด์ ์๋ C++98์ด ํ์ํจ)์ ์ง์ํด์ผ ํฉ๋๋ค. GCC 10๊ฐ GCC 3.4์ ๋น๋ํ๋ ๋ฐ ์ถฉ๋ถํ๋ค๋ฉด ์ด์ GCC 11์ ๋น๋ํ๋ ค๋ฉด ์ต์ํ GCC 4.8์ด ํ์ํฉ๋๋ค.
- LTO ์ต์ ํ์ ํ์ํ ๋คํ, ์์ ํ์ผ, ์ถ๊ฐ ์ ๋ณด ์ ์ฅ์ ์ํ ํ์ผ ์ด๋ฆ๊ณผ ์์น๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด์ ์ด๋ฌํ ํ์ผ์ "-dumpbase", "-dumpdir" ๋ฐ "-save-temps=*" ์ต์ ์ ํตํด ๊ฒฝ๋ก๊ฐ ๋ช ์์ ์ผ๋ก ๋ณ๊ฒฝ๋์ง ์๋ ํ ํญ์ ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค.
- HSAIL(์ด๊ธฐ์ข ์์คํ ์ํคํ ์ฒ ์ค๊ฐ ์ธ์ด) ์ธ์ด์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐ์ด๋๋ฆฌ ํ์ BRIG์ ๋ํ ์ง์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ๊ณง ์ ๊ฑฐ๋ ์์ ์ ๋๋ค.
- ThreadSanitizer ๋ชจ๋(-fsanitize=thread)์ ๊ธฐ๋ฅ์ด ํ์ฅ๋์ด ๋ค์ค ์ค๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ์ค๋ ๋์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ๋ ๊ฒฝํฉ ์กฐ๊ฑด์ ๊ฐ์งํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ ๋ฆด๋ฆฌ์ค์๋ ๋์ฒด ๋ฐํ์ ๋ฐ ํ๊ฒฝ์ ๋ํ ์ง์์ ๋ฌผ๋ก Linux ์ปค๋ ๋ด์์ ๊ฒฝ์ ์กฐ๊ฑด์ ๋์ ์ผ๋ก ๊ฐ์งํ๋๋ก ์ค๊ณ๋ KCSAN(Kernel Concurrency Sanitizer) ๋๋ฒ๊น ๋๊ตฌ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์๋ก์ด ์ต์ "-param tsan-distinguish-ํ๋ฐ์ฑ" ๋ฐ "-param tsan-instrument-func-entry-exit"๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ์ด์ ์ง๋จ ๋ฉ์์ง์ ์ด ๋ฒํธ๋ ์ค ์์ ๋ถ๋ถ์ ๋ฐ์ดํธ ์๋ฅผ ๋ฐ์ํ์ง ์๊ณ ์ค์ ๋ก๋ ๋ฉํฐ๋ฐ์ดํธ ๋ฌธ์์ ์ค์ ์ฌ๋ฌ ์์น๋ฅผ ์ฐจ์งํ๋ ๋ฌธ์(์: ๐ ๋ฌธ์๊ฐ ๋ ์์น๋ฅผ ์ฐจ์งํ๊ณ 4๋ฐ์ดํธ๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค.) ๋ง์ฐฌ๊ฐ์ง๋ก ํญ ๋ฌธ์๋ ์ด์ ํน์ ์์ ๊ณต๋ฐฑ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค(-ftabstop ์ต์ ์ ํตํด ๊ตฌ์ฑ ๊ฐ๋ฅ, ๊ธฐ๋ณธ๊ฐ์ 8). ์ด์ ๋์์ ๋ณต์ํ๊ธฐ ์ํด "-fdiagnostics-column-unit=byte" ์ต์ ์ด ์ ์๋๊ณ , ์ด๊ธฐ ๊ฐ(0 ๋๋ 1๋ถํฐ ๋ฒํธ ๋งค๊ธฐ๊ธฐ)์ ๊ฒฐ์ ํ๊ธฐ ์ํด "-fdiagnostics-column-origin=" ์ต์ ์ด ์ ์๋ฉ๋๋ค.
- ๋ฒกํฐํ๊ธฐ๋ ํจ์์ ์ ์ฒด ๋ด์ฉ์ ๊ณ ๋ คํ๊ณ ์ ์ด ํ๋ฆ ๊ทธ๋ํ(CFG, ์ ์ด ํ๋ฆ ๊ทธ๋ํ)์ ์ด์ ๋ธ๋ก์ ๋ํ ์ฐธ์กฐ ๋ฐ ๊ต์ฐจ์ ๊ณผ ๊ด๋ จ๋ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค.
- ์ต์ ํ ํ๋ก๊ทธ๋จ์ ๋์ผํ ๋ณ์๋ฅผ ์ค์์น ํํ์์ผ๋ก ๋น๊ตํ๋ ์ผ๋ จ์ ์กฐ๊ฑด๋ถ ์ฐ์ฐ์ ๋ณํํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค. ์์ผ๋ก๋ ๋นํธ ํ ์คํธ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ค์์น ํํ์์ ์ธ์ฝ๋ฉํ ์ ์์ต๋๋ค(์ด๋ฌํ ๋ณํ์ ์ ์ดํ๊ธฐ ์ํด "-fbit-tests" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค).
- ํ๋ก์์ ๊ฐ ์ต์ ํ๊ฐ ๊ฐ์ ๋์์ต๋๋ค. ํจ์ ํธ์ถ ์ ๋ถ์์ฉ์ ์ถ์ ํ๊ณ ๋ถ์์ ์ ํ์ฑ์ ๋์ด๊ธฐ ์ํด ์๋ก์ด IPA-modref ํจ์ค(-fipa-modref)๋ฅผ ์ถ๊ฐํ์ต๋๋ค. IPA-ICF ํจ์ค(-fipa-icf)์ ๊ตฌํ์ด ๊ฐ์ ๋์ด ์ปดํ์ผ ์ค ๋ฉ๋ชจ๋ฆฌ ์๋น๊ฐ ์ค์ด๋ค๊ณ ๋์ผํ ์ฝ๋ ๋ธ๋ก์ด ๊ฒฐํฉ๋๋ ํตํฉ ํจ์์ ์๊ฐ ๋์ด๋ฉ๋๋ค. IPA-CP(ํ๋ก์์ ๊ฐ ์์ ์ ํ) ํจ์ค์์๋ ๋ฃจํ์ ์๋ ค์ง ๊ฒฝ๊ณ์ ๊ธฐ๋ฅ์ ๊ณ ๋ คํ์ฌ ์์ธก ํด๋ฆฌ์คํฑ์ด ๊ฐ์ ๋์์ต๋๋ค.
- LTO(Linking Time Optimization)์์๋ ๋ฐ์ดํธ์ฝ๋ ํ์์ด ์ต์ ํ๋์ด ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฒ๋ฆฌ ์๋๋ฅผ ํฅ์์ํต๋๋ค. ๋ฐ์ธ๋ฉ ๋จ๊ณ ์ค ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์๋น๊ฐ ๊ฐ์ํ์ต๋๋ค.
- ์คํ ๊ธฐ๋ฅ ๋ถ์์ ๊ธฐ๋ฐ์ผ๋ก ๋ณด๋ค ์ต์ ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ์ฝ๋ ํ๋กํ์ผ๋ง(PGO - ํ๋กํ ๊ธฐ๋ฐ ์ต์ ํ) ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ต์ ํ ๋ฉ์ปค๋์ฆ์์๋ ์ ๋ก ์นด์ดํฐ์ ๋ณด๋ค ์ปดํฉํธํ ํจํค์ง์ผ๋ก ์ธํด GCOV ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ํ์ผ ํฌ๊ธฐ๊ฐ ์ค์ด๋ญ๋๋ค. . ๊ฐ์ ํธ์ถ์์ ๋ ๋ง์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ์ ํ์ฌ "-fprofile-values" ๋ชจ๋๋ฅผ ๊ฐ์ ํ์ต๋๋ค.
- SIMD(๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๋ฒกํฐํ ์ฅ์น)๊ฐ ์๋ ๋ฉํฐ ์ฝ์ด ๋ฐ ํ์ด๋ธ๋ฆฌ๋(CPU+GPU/DSP) ์์คํ ์ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํ API์ ๋ฐฉ๋ฒ์ ์ ์ํ๋ OpenMP 5.0(๊ฐ๋ฐฉํ ๋ค์ค ์ฒ๋ฆฌ) ํ์ค์ด ๊ตฌํ๋์์ต๋๋ค. ๊ณ์๋๋. ํ ๋น ์ง์๋ฌธ์ ๋ํ ์ด๊ธฐ ์ง์๊ณผ OpenMP ๊ตฌ์ฑ์์ ์ด๊ธฐ์ข ๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. OMP_TARGET_OFFLOAD ํ๊ฒฝ ๋ณ์์ ๋ํ ์ง์์ด ๊ตฌํ๋์์ต๋๋ค.
- C, C++ ๋ฐ Fortran ์ธ์ด์ฉ์ผ๋ก ์ ๊ณต๋๋ OpenACC 2.6 ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ ์ฌ์์ ๊ตฌํ์ด ๊ฐ์ ๋์์ต๋๋ค. ์ด๋ GPU ๋ฐ NVIDIA PTX์ ๊ฐ์ ํน์ ํ๋ก์ธ์์์ ์์ ์ ์คํ๋ก๋ํ๊ธฐ ์ํ ๋๊ตฌ๋ฅผ ์ ์ํฉ๋๋ค.
- C ์ธ์ด์ ๊ฒฝ์ฐ ์คํ ๋ณดํธ๋ฅผ ํ์ฑํํด์๋ ์ ๋๋ ๊ธฐ๋ฅ("-fstack-protector")์ ํ์ํ๋๋ก ์ค๊ณ๋ ์๋ก์ด ์์ฑ "no_stack_protector"๊ฐ ๊ตฌํ๋์์ต๋๋ค. "malloc" ์์ฑ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ๋ฅผ ์ํ ํธ์ถ ์(ํ ๋น์/ํ ๋น ์ทจ์์) ์๋ณ์ ์ง์ํ๋๋ก ํ์ฅ๋์์ต๋๋ค. ์ด๋ ์ ์ ๋ถ์๊ธฐ์์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ผ๋ฐ์ ์ธ ์ค๋ฅ(๋ฉ๋ชจ๋ฆฌ ๋์, ํด์ ํ ์ฌ์ฉ, free ํจ์์ ๋ํ ์ด์ค ํธ์ถ ๋ฑ) ๊ทธ๋ฆฌ๊ณ ์ปดํ์ผ๋ฌ์์๋ "-Wmismatched-dealloc", "-Wmismatched-new-delete" ๋ฐ "-Wfree-nonheap-object" ๊ฒฝ๊ณ ๋ฅผ ํ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํด์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ ๊ฐ์ ๋ถ์ผ์น๋ฅผ ์๋ฆฝ๋๋ค.
- C ์ธ์ด์ ๋ํ ์๋ก์ด ๊ฒฝ๊ณ ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- "-Wmismatched-dealloc"(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋จ) - ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ธฐ๋ฅ๊ณผ ํธํ๋์ง ์๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํด์ ์์ ์ ๋ํด ๊ฒฝ๊ณ ํฉ๋๋ค.
- "-Wsizeof-array-div"("-Wall"์ด ์ง์ ๋ ๊ฒฝ์ฐ ํ์ฑํ๋จ) - ์ ์๊ฐ ๋ฐฐ์ด ์์์ ํฌ๊ธฐ์ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ ๋ ๊ฐ์ sizeof ์ฐ์ฐ์๋ฅผ ๋๋๋ ๊ฒ์ ๋ํด ๊ฒฝ๊ณ ํฉ๋๋ค.
- "-Wstringop-overread"(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋จ) - ๋ฐฐ์ด ๊ฒฝ๊ณ ์ธ๋ถ ์์ญ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋ฌธ์์ด ํจ์ ํธ์ถ์ ๋ํด ๊ฒฝ๊ณ ํฉ๋๋ค.
- "-Wtsan"(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋จ) - ThreadSanitizer์์ ์ง์๋์ง ์๋ ๊ธฐ๋ฅ(์: std::atomic_thread_fence) ์ฌ์ฉ์ ๋ํด ๊ฒฝ๊ณ ํฉ๋๋ค.
- "-Warray-parameter" ๋ฐ "-Wvla-parameter"("-Wall"์ ์ง์ ํ ๋ ํ์ฑํ๋จ) - ๊ณ ์ ๋ฐ ๊ฐ๋ณ ๊ธธ์ด ๋ฐฐ์ด๊ณผ ๊ด๋ จ๋ ํธํ๋์ง ์๋ ์ธ์ ์ ์ธ์ผ๋ก ํจ์๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ์ ๋ํด ๊ฒฝ๊ณ ํฉ๋๋ค.
- ์ด์ "-Wuninitialized" ๊ฒฝ๊ณ ๋ ์ด๊ธฐํ๋์ง ์์ ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ๊ธฐ ์๋๋ฅผ ๊ฐ์งํฉ๋๋ค.
- "-Wfree-nonheap-object" ๊ฒฝ๊ณ ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํจ์๋ฅผ ํตํด ์ป์ง ๋ชปํ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํด์ ํจ์๊ฐ ํธ์ถ๋๋ ๊ฒฝ์ฐ์ ์ ์๋ฅผ ํ์ฅํฉ๋๋ค.
- "-Wmaybe-uninitialized" ๊ฒฝ๊ณ ๋ ์ด๊ธฐํ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ์ฐธ์กฐํ๋ ํจ์์ ๋ํ ํฌ์ธํฐ ์ ๋ฌ ๊ฐ์ง๋ฅผ ํ์ฅํ์ต๋๋ค.
- C ์ธ์ด์ ๊ฒฝ์ฐ C2X ํ์ค ํ๋ ์์ํฌ ๋ด์์ ๊ฐ๋ฐ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ผ๋ถ๊ฐ ๊ตฌํ๋์์ต๋๋ค(-std=c2x ๋ฐ -std=gnu2x๋ฅผ ์ง์ ํ์ฌ ํ์ฑํ๋จ). ๋งคํฌ๋ก BOOL_MAX ๋ฐ BOOL_WIDTH, ํจ์์์ ์ฌ์ฉ๋์ง ์๋ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ์ ํ์ ํ์ ์ ์(C++์์์ ๊ฐ์), ์์ฑ "[ [nodiscard]]", ์ ์ฒ๋ฆฌ๊ธฐ ์ฐ์ฐ์ "__has_c_attribute", ๋งคํฌ๋ก FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC_60559_EXT__, INFINITY, NAN, FLT_SNAN, DBL_SNAN, LDBL_SN AN, DEC_INFINITY ๋ฐ DEC _NAN, NaN=๋งคํฌ๋ก FloatN, _FloatNx ๋ฐ _DecimalN, ์ ์ธ ์๊ณผ ๋ณตํฉ ๋ช ๋ น๋ฌธ ๋์ ์ ํ โโํ์๋ฅผ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- C++์ ๊ฒฝ์ฐ ๊ฐ์ ํจ์ "consteval virtual", ๊ฐ์ฒด ์๋ช ์ฃผ๊ธฐ ์ข ๋ฃ๋ฅผ ์ํ ์์ฌ ์๋ฉธ์, enum ํด๋์ค ์ฌ์ฉ ๋ฐ C++20 ํ์ค์์ ์ ์๋ ๋ณ๊ฒฝ ๋ฐ ํ์ ์ ์ผ๋ถ๊ฐ ๊ตฌํ๋์์ต๋๋ค. "new" ํํ์์์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- C++์ ๊ฒฝ์ฐ ํฅํ C++23 ํ์ค์ ์ํด ๊ฐ๋ฐ ์ค์ธ ์ผ๋ถ ๊ฐ์ ์ฌํญ์ ๋ํ ์คํ์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค(-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2b). ์๋ฅผ ๋ค์ด, ์ด์ ์๋ช ๋ size_t ๊ฐ์ ๋ํด ๋ฆฌํฐ๋ด ์ ๋ฏธ์ฌ "zu"๊ฐ ์ง์๋ฉ๋๋ค.
- libstdc++๋ ๋ถ๋ ์์์ ์ ํ์ ๋ํ std::from_chars ๋ฐ std::to_chars ๊ตฌํ ๋์ ์ ํฌํจํ์ฌ C++17 ํ์ค์ ๋ํ ์ง์์ ๊ฐ์ ํ์ต๋๋ค. std::bit_cast, std::source_location, ์์์ฑ ์์ ๋๊ธฐ ๋ฐ ์๋ฆผ, , , , ๋ฑ C++20 ํ์ค์ ์๋ก์ด ์์๋ฅผ ๊ตฌํํ์ต๋๋ค. ํฅํ C++ ํ์ค 23(std::to_underlying, std::is_scoped_enum). ๋ณ๋ ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ํ(SIMD, ๋ฐ์ดํฐ ๋ณ๋ ฌ ์ ํ)์ ๋ํ ์คํ์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. std::uniform_int_distribution ๊ตฌํ์ด ๊ฐ์ํ๋์์ต๋๋ค.
- ์ฝ๋ ์์ฑ๊ธฐ๋ฅผ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ด์ฅํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํธ์ฝ๋์ JIT ์ปดํ์ผ์ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ๊ตฌ์ฑํ๊ธฐ ์ํ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ libgccjit์์ ์ํ ํ์ง ํ๋๊ทธ๋ฅผ ์ ๊ฑฐํ์ต๋๋ค. MinGW์ฉ libgccjit๋ฅผ ๋น๋ํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- AArch64 Armv8-R ์ํคํ ์ฒ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค(-march=armv8-r). AArch64 ๋ฐ ARM ์ํคํ ์ฒ์ ๊ฒฝ์ฐ ํ๋ก์ธ์์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค(๋งค๊ฐ๋ณ์ -mcpu ๋ฐ -mtune): Arm Cortex-A78(cortex-a78), Arm Cortex-A78AE(cortex-a78ae), Arm Cortex-A78C(cortex-a78c) , Arm Cortex-X1(cortex-x1), Arm Neoverse V1(neoverse-v1) ๋ฐ Arm Neoverse N2(neoverse-n2)์ ๋๋ค. Fujitsu A64FX(a64fx) ๋ฐ Arm Cortex-R82(cortex-r82) CPU๋ ์ถ๊ฐ๋์ด AArch64 ์ํคํ ์ฒ๋ง ์ง์ํฉ๋๋ค.
- Armv8.3-a(AArch64/AArch32), SVE(AArch64), SVE2(AArch64) ๋ฐ MVE(AArch32 M-profile) SIMD ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ , ๋บ์ , ๊ณฑ์ ๋ฐ ๋ง์ /๋บ์ ๋ณํ์ ์ํํ๋ ์์ ์ ์๋ ๋ฒกํฐํํ๋ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ๋ณต์์. MVE ๋ช ๋ น์ด ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ARM์ ๋ํ ์๋ ๋ฒกํฐํ์ ๋ํ ์ด๊ธฐ ์ง์์ ์ถ๊ฐํ์ต๋๋ค.
- ARM ํ๋ซํผ์ ๊ฒฝ์ฐ ACLE Q3 2020 ์ฌ์์ ๋ฌธ์ํ๋ ๋ชจ๋ NEON ๋ช ๋ น์ด๋ฅผ ํฌ๊ดํ๋ ํ์ฅ ๋ฒกํฐ ๋ช ๋ น์ด(SIMD)๋ก ๋์ฒด๋ ์ ์ฒด ์ปดํ์ผ๋ฌ ํตํฉ C ํจ์(๋ด์ฅ) ์ธํธ๊ฐ ์ ๊ณต๋ฉ๋๋ค.
- GCN ๋ง์ดํฌ๋ก์ํคํ ์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ AMD GPU์ฉ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด gfx908 GPU์ ๋ํ ์ง์์ด ๋ฐฑ์๋์ ์ถ๊ฐ๋์์ต๋๋ค.
- ์๋ก์ด ํ๋ก์ธ์ ๋ฐ ์ฌ๊ธฐ์ ๊ตฌํ๋ ์๋ก์ด ๋ช
๋ น์ด ์ธํธ ํ์ฅ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- Intel Sapphire Rapids(-march=sapphirerapids, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-INT8, AMX-BF16 ๋ฐ AVX-VNNI ๋ช ๋ น์ ๋ํ ์ง์์ ํ์ฑํํฉ๋๋ค.
- Intel Alderlake(-march=alderlake, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI ๋ฐ HRESET ๋ช ๋ น ์ง์ ํ์ฑํ)
- Intel Rocketlake(-march=rocketlake, SGX๋ฅผ ์ง์ํ์ง ์๋ Rocket Lake์ ์ ์ฌ).
- AMD Zen 3(-march=znver3).
- Intel ํ๋ก์ธ์ ๊ธฐ๋ฐ IA-32/x86-64 ์์คํ ์ ๊ฒฝ์ฐ ์๋ก์ด ํ๋ก์ธ์ ์ง์นจ TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- x86-64 ์ํคํ ์ฒ ์์ค์ ์ ํํ๊ธฐ ์ํ "-march=x234-86-v[64]" ํ๋๊ทธ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค(v2 - SSE4.2, SSSE3, POPCNT ๋ฐ CMPXCHG16B ํ์ฅ ํฌํจ, v3 - AVX2 ๋ฐ MOVBE, v4 - AVX-512 ) .
- ๋น ์๋์ ๋ฐ์ดํธ ์์๋ฅผ ์ฌ์ฉํ๋ RISC-V ์์คํ ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. RISC-V ๋ช ๋ น์ด ์ธํธ ์ํคํ ์ฒ ์ฌ์์ ๋ฒ์ ์ ์ ํํ๋ "-misa-spec=*" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค. Canary ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ AddressSanitizer ๋ฐ ์คํ ๋ณดํธ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ํ๋ก๊ทธ๋จ์ ์ฝ๋ ์คํ ๊ฒฝ๋ก ๋ฐ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ํ ๋ฆฌ์์ค ์ง์ฝ์ ์ธ ์ ์ฐจ๊ฐ ๋ถ์์ ์ํํ๋ "-fanalyzer" ์ ์ ๋ถ์ ๋ชจ๋๊ฐ ์ง์์ ์ผ๋ก ๊ฐ์ ๋์์ต๋๋ค. ์ด ๋ชจ๋๋ ํ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํ free() ํจ์์ ๋ํ ์ด์ค ํธ์ถ, ํ์ผ ์ค๋ช
์ ๋์ถ, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ ๋ฐ ์ ๋ฌ, ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก ์ก์ธ์ค, ์ด๊ธฐํ๋์ง ์์ ๊ฐ ์ฌ์ฉ ๋ฑ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ปดํ์ผ ๋จ๊ณ์์ ๊ฐ์งํ ์ ์์ต๋๋ค. ์ ๋ฒ์ ์์๋:
- ํ๋ก๊ทธ๋จ ์ํ๋ฅผ ์ถ์ ํ๋ ์ฝ๋๊ฐ ์์ ํ ๋ค์ ์์ฑ๋์์ต๋๋ค. ๋งค์ฐ ํฐ C ํ์ผ์ ์ค์บํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
- ์ด๊ธฐ C++ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํ ๋น ํด์ ๋ถ์์ ํน์ malloc ๋ฐ free ํจ์์์ ์ถ์ํ๋์์ผ๋ฉฐ ์ด์ new/delete ๋ฐ new[]/delete[]๋ฅผ ์ง์ํฉ๋๋ค.
- ์๋ก์ด ๊ฒฝ๊ณ ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค: -Wanalyzer-shift-count-negative, -Wanalyzer-shift-count-overflow, -Wanalyzer-write-to-const ๋ฐ -Wanalyzer-write-to-string-literal.
- ์๋ก์ด ๋๋ฒ๊น ์ต์ -fdump-analyzer-json ๋ฐ -fno-analyzer-feasibility๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- GCC์ฉ ํ๋ฌ๊ทธ์ธ์ ํตํด ๋ถ์๊ธฐ๋ฅผ ํ์ฅํ๋ ๊ธฐ๋ฅ์ด ๊ตฌํ๋์์ต๋๋ค(์๋ฅผ ๋ค์ด CPython์์ ์ ์ญ ์ ๊ธ(GIL)์ ์๋ชป๋ ์ฌ์ฉ์ ํ์ธํ๊ธฐ ์ํ ํ๋ฌ๊ทธ์ธ์ด ์ค๋น๋์์ต๋๋ค).
์ถ์ฒ : opennet.ru