XNUMX๋
์ ๊ฐ๋ฐ ๋์
GCC 9.1์ C++17 ํ์ค์ ๋ํ ์ง์์ ์์ ํํ๊ณ , ๋ฏธ๋ C++20 ํ์ค(์ฝ๋๋ช C++2a)์ ๊ธฐ๋ฅ์ ๊ณ์ ๊ตฌํํ๊ณ , D ์ธ์ด์ ๋ํ ํ๋ฐํธ์๋์ ํฌํจํ๊ณ , OpenMP 5.0์ ๋ํ ๋ถ๋ถ ์ง์์ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก ์ ๋ช ํฉ๋๋ค. , OpenACC 2.5์ ๋ํ ๊ฑฐ์ ์๋ฒฝํ ์ง์, ๋ฐ์ธ๋ฉ ๋จ๊ณ์์ ์ ์ฐจ ๊ฐ ์ต์ ํ ๋ฐ ์ต์ ํ์ ํ์ฅ์ฑ ํฅ์, ์ง๋จ ๋๊ตฌ ํ์ฅ ๋ฐ ์๋ก์ด ๊ฒฝ๊ณ ์ถ๊ฐ, OpenRISC, C-SKY V2 ๋ฐ AMD GCN GPU์ฉ ๋ฐฑ์๋.
์ฃผ์
- D ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. GCC์๋ ์ปดํ์ผ๋ฌ๊ฐ ํฌํจ๋ ํ๋ฐํธ์๋๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
GDC (Gnu D ์ปดํ์ผ๋ฌ) ๋ฐ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(libphobos): ํ์ค GCC๋ฅผ ์ฌ์ฉํ์ฌ D ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ํ๋ก๊ทธ๋จ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. GCC์์ D ์ธ์ด ์ง์์ ํ์ฑํํ๋ ํ๋ก์ธ์ค์์๋์๋ค 2011๋ ์ผ๋ก ๋์๊ฐ์ง๋ง๋๋ค GCC ์๊ตฌ ์ฌํญ์ ์ค์ํ๋๋ก ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ผ ํ ํ์์ฑ๊ณผ D ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ฐ๋ฐํ๊ณ ์๋ Digital Mars์ ๋ํ ์ง์ ์ฌ์ฐ๊ถ ์ด์ ๋ฌธ์ ๋ก ์ธํด; - ์ฝ๋ ์์ฑ๊ธฐ๊ฐ ๊ฐ์ ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ํฉ์ ๋ฐ๋ผ Switch ํํ์(์ ํ ํ ์ด๋ธ, ๋นํธ ํ ์คํธ, ์์ฌ๊ฒฐ์ ํธ๋ฆฌ)์ ํ์ฅํ๊ธฐ ์ํ ๋ค์ํ ์ ๋ต์ ์ฌ์ฉ์ด ๊ตฌํ๋์์ต๋๋ค. "-ftree-switch-conversion" ์ต์ ํ๋ฅผ ์ฌ์ฉํ์ฌ Switch ํํ์์ ํฌํจํ๋ ์ ํ ํจ์๋ฅผ ๋ณํํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค(์: "์ฌ๋ก 2: ๋ฐฉ๋ฒ = 205; ์ค๋จ; ์ฌ๋ก 3: ๋ฐฉ๋ฒ = 305; ์ค๋จ๊ณผ ๊ฐ์ ์กฐ๊ฑด ์งํฉ). ;โ๋ "100 * ์ด๋ป๊ฒ + 5"๋ก ๋ณํ๋ฉ๋๋ค.
- ํ๋ก์์ ๊ฐ ์ต์ ํ๊ฐ ๊ฐ์ ๋์์ต๋๋ค. ์ธ๋ผ์ธ ๋ฐฐํฌ ์ค์ ์ ์ต์ C++ ์ฝ๋๋ฒ ์ด์ค์ ๋ง๊ฒ ์กฐ์ ๋์์ผ๋ฉฐ ์๋ก์ด ๋งค๊ฐ๋ณ์ max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns ๋ฐ uninlined๋ก ํ์ฅ๋์์ต๋๋ค. -์ฝํฌํ์. ์ฝ๋/ํซ ์ฝ๋ ๋ถ๋ฆฌ์ ์ ํ์ฑ๊ณผ ๊ณต๊ฒฉ์ฑ์ด ํฅ์๋์์ต๋๋ค. ๋๊ท๋ชจ ํ์ฅ์ฑ์ ์ํ ํฅ์๋ ํ์ฅ์ฑ
๋ฒ์ญ ๋จ์ (์๋ฅผ ๋ค์ด ๋๊ท๋ชจ ํ๋ก๊ทธ๋จ์ ์ฐ๊ฒฐ ๋จ๊ณ์์ ์ต์ ํ๋ฅผ ์ ์ฉํ๋ ๊ฒฝ์ฐ) - ์ฝ๋ ํ๋กํ์ผ๋ง(PGO - Profile-guided Optimization) ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ต์ ํ ๋ฉ์ปค๋์ฆ์ด ๊ฐ์ ๋์ด ์ฝ๋ ์คํ ํน์ฑ ๋ถ์์ ๋ฐํ์ผ๋ก ๋์ฑ ์ต์ ์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ์์ฝ ์ต์
"
-fprofile-์ฌ์ฉ "์๋ ์ด์ ์ต์ ํ ๋ชจ๋ "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" ๋ฐ "-ftree-loop-distribution"์ด ํฌํจ๋ฉ๋๋ค. ํ์ผ์ ์นด์ดํฐ๊ฐ ์๋ ํ์คํ ๊ทธ๋จ ํฌํจ์ ์ ๊ฑฐํ์ฌ ํ๋กํ์ด ์๋ ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์์ต๋๋ค(์ด์ ์ฐ๊ฒฐ ์ค์ ์ต์ ํ๋ฅผ ์ํํ ๋ ํ์คํ ๊ทธ๋จ์ด ์ฆ์ ์์ฑ๋ฉ๋๋ค). - ํฅ์๋ ์ฐ๊ฒฐ ์๊ฐ ์ต์ ํ(LTO). ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๊ธฐ ์ ์ ํ์ ๋จ์ํ๋ฅผ ์ ๊ณตํ์ฌ LTO ๊ฐ์ฒด ํ์ผ์ ํฌ๊ธฐ๋ฅผ ๋ํญ ์ค์ด๊ณ ๋ฐ์ธ๋ฉ ๋จ๊ณ์์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ค์ด๋ฉฐ ์์
๋ณ๋ ฌํ๋ฅผ ํฅ์์ํฌ ์ ์์์ต๋๋ค. ํํฐ์
์(-param lto-partitions)๊ฐ 32๊ฐ์์ 128๊ฐ๋ก ์ฆ๊ฐํ์ฌ CPU ์ค๋ ๋ ์๊ฐ ๋ง์ ์์คํ
์ ์ฑ๋ฅ์ด ํฅ์๋์์ต๋๋ค. ์ต์ ํ ํ๋ก์ธ์ค ์๋ฅผ ์ ์ดํ๊ธฐ ์ํ ๋งค๊ฐ๋ณ์๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
"-param lto-max-์คํธ๋ฆฌ๋ฐ-๋ณ๋ ฌ์ฑ";๊ฒฐ๊ณผ์ ์ผ๋ก GCC 8.3๊ณผ ๋น๊ตํ์ฌ GCC 9์ ๋์ ๋ ์ต์ ํ๋
ํ์ฉ ๋ Firefox 5 ๋ฐ LibreOffice 66์ ์ปดํ์ผ ์๊ฐ์ ์ฝ 6.2.3% ๋จ์ถํฉ๋๋ค. ๊ฐ์ฒด ํ์ผ์ ํฌ๊ธฐ๊ฐ 7% ๊ฐ์ํ์ต๋๋ค. 8์ฝ์ด CPU์ ๋ฐ์ธ๋ฉ ์๊ฐ์ด 11% ๊ฐ์ํ์ต๋๋ค. ์ฐ๊ฒฐ ๋จ๊ณ์ ์์ฐจ์ ์ต์ ํ ๋จ๊ณ๋ ์ด์ 28% ๋ ๋นจ๋ผ์ง๊ณ 20% ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํฉ๋๋ค. LTO ๋ณ๋ ฌํ ๋จ๊ณ์ ๊ฐ ํ๋ก์ธ์์ ๋ฉ๋ชจ๋ฆฌ ์๋น๊ฐ 30% ๊ฐ์ํ์ต๋๋ค. - ๋๋ถ๋ถ์ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ ์ฌ์์ C, C++ ๋ฐ Fortran ์ธ์ด์ ๋ํด ๊ตฌํ๋ฉ๋๋ค.
์คํACC 2.5 GPU ๋ฐ NVIDIA PTX์ ๊ฐ์ ํน์ ํ๋ก์ธ์์์ ์์ ์ ์คํ๋ก๋ํ๊ธฐ ์ํ ๋๊ตฌ๋ฅผ ์ ์ํฉ๋๋ค. - ํ์ค์ ๋ํ ๋ถ๋ถ ์ง์์ด C ๋ฐ C++์ ๋ํด ๊ตฌํ๋์์ต๋๋ค.
์คํMP 5.0 (Open Multi-Processing), ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๋ฒกํฐํ ์ฅ์น(SIMD)๊ฐ ์๋ ๋ฉํฐ ์ฝ์ด ๋ฐ ํ์ด๋ธ๋ฆฌ๋(CPU+GPU/DSP) ์์คํ ์์ C, C++ ๋ฐ Fortran ์ธ์ด์ ๋ํ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ์ ์ ์ฉํ๋ API ๋ฐ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค. ; - C ์ธ์ด์ ๋ํ ์๋ก์ด ๊ฒฝ๊ณ ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค: "
-ํฌ์ฅ ํ์์ Waddress "(๊ตฌ์กฐ์ฒด ๋๋ ๊ณต์ฉ์ฒด์ ์์ถ๋ ๋ฉค๋ฒ์ ๋ํ ์ ๋ ฌ๋์ง ์์ ํฌ์ธํฐ ๊ฐ) ๋ฐ
ยซ-W์ ๋๊ฐ " (์ ๋๊ฐ ๊ณ์ฐ์ ์ํ ํจ์์ ์ก์ธ์คํ ๋ ์ง์ ๋ ์ธ์์ ๋ ์ ํฉํ ํจ์๊ฐ ์๋ ๊ฒฝ์ฐ, ์๋ฅผ ๋ค์ด abs(3.14) ๋์ fabs(3.14)๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. C++์ ์๋ก์ด ๊ฒฝ๊ณ ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค: "-Wdeprecated-copy",
"-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" ๋ฐ "-Wclass-conversion". ์ด์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ง์ ๊ฒฝ๊ณ ๊ฐ ํ์ฅ๋์์ต๋๋ค. - ์ฝ๋๋ช C2x์ธ ๋ฏธ๋ C ์ธ์ด ํ์ค์ ์ผ๋ถ์ ๋ํ ์คํ์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. C2x ์ง์์ ํ์ฑํํ๋ ค๋ฉด "-std=c2x" ๋ฐ "-std=gnu2x" ์ต์ ์ ์ฌ์ฉํ์ญ์์ค(GNU ํ์ฅ์ ํ์ฑํํ๋ ค๋ฉด). ํ์ค์ ์์ง ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์ด๋ฏ๋ก ํด๋น ๊ธฐ๋ฅ ์ค ํ๋์ ์ธ์๊ฐ ์๋ _Static_assert ํํ์๋ง ์ง์๋ฉ๋๋ค(๋ ๊ฐ์ ์ธ์๊ฐ ์๋ _Static_assert๋ C11์์ ํ์คํ๋จ).
- C++17 ํ์ค์ ๋ํ ์ง์์ด ์์ ์ ์ผ๋ก ์ ์ธ๋์์ต๋๋ค. ํ๋ก ํธ์๋์์๋ C++17์ ์ธ์ด ๊ธฐ๋ฅ์ด ์์ ํ ๊ตฌํ๋์์ผ๋ฉฐ, libstdc++์์๋ ํ์ค์ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๊ฐ ๊ฑฐ์ ์ ์ฒด ๊ตฌํ์ ๊ฐ๊น์ต๋๋ค.
- ๊ณ์๋๋
๊ตฌํ ๋ฏธ๋ C++2a ํ์ค์ ์์. ์๋ฅผ ๋ค์ด, ์ด๊ธฐํ ์ค์ ๋ฒ์๋ฅผ ํฌํจํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์๊ณ , ๋๋ค ํํ์์ ๋ํ ํ์ฅ์ด ๊ตฌํ๋์์ผ๋ฉฐ, ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋น ๋ฉค๋ฒ ๋ฐ ๊ฐ๋ฅ์ฑ/๊ฐ๋ฅ์ฑ์ด ์๋ ์์ฑ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ผ๋ฉฐ, ์กฐ๊ฑด์์์ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ธฐ๋ฅ์ด ์ ๊ณต๋์์ต๋๋ค. , ๋ฑ.
C++2a ์ง์์ ํ์ฑํํ๋ ค๋ฉด "-std=c++2a" ๋ฐ "-std=gnu++2a" ์ต์ ์ ์ฌ์ฉํ์ธ์. C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ๋ฐ std::type_identity ํน์ฑ, std::midpoint, std::lerp ํจ์์ฉ libstdc++์ ๋นํธ ๋ฐ ๋ฒ์ ํค๋ ํ์ผ์ ์ถ๊ฐํ์ต๋๋ค. , ํ์ค::bind_front,
std::visit, std::is_constant_evaluated ๋ฐ std::assume_aligned, char8_t ์ ํ์ ๋ํ ์ง์ ์ถ๊ฐ, ๋ฌธ์์ด์ ์ ๋์ฌ ๋ฐ ์ ๋ฏธ์ฌ(starts_with, end_with)๋ฅผ ํ์ธํ๋ ๊ธฐ๋ฅ ๊ตฌํ - ์๋ก์ด ARM ํ๋ก์ธ์์ ๋ํ ์ง์ ์ถ๊ฐ
Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE ๋ฐ Neoverse N1. ๋ณต์์, ์์ฌ ๋์ ์์ฑ(rng) ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํ๊น (memtag) ์์ ์ ์ํด Armv8.3-A์ ๋์ ๋ ๋ช ๋ น์ ๋ํ ์ง์์ ๋ฌผ๋ก ์์ธก ์คํ ๋ฐ ๋ถ๊ธฐ ์์ธก ์ฅ์น ์๋๊ณผ ๊ด๋ จ๋ ๊ณต๊ฒฉ์ ์ฐจ๋จํ๊ธฐ ์ํ ๋ช ๋ น์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. . AArch64 ์ํคํ ์ฒ์ ๊ฒฝ์ฐ ๋ณดํธ ๋ชจ๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.์คํ๊ณผ ํ์ ๊ต์ฐจ์ (โ-fstack-clash ๋ณดํธโ). Armv8.5-A ์ํคํ ์ฒ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด "-march=armv8.5-a" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค. - ์ฌ๊ธฐ์๋ GCN ๋ง์ดํฌ๋ก์ํคํ ์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ AMD GPU์ฉ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋ฐฑ์๋๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๊ตฌํ์ ํ์ฌ ๋จ์ผ ์ค๋ ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผ(OpenMP ๋ฐ OpenACC๋ฅผ ํตํ ๋ค์ค ์ค๋ ๋ ๊ณ์ฐ ์ํ ์ง์์ ๋์ค์ ์ ๊ณต๋ ์์ )๊ณผ GPU Fiji ๋ฐ Vega 10์ ๋ํ ์ง์์ผ๋ก ์ ํ๋ฉ๋๋ค.
- ํ๋ก์ธ์๋ฅผ ์ํ ์๋ก์ด ๋ฐฑ์๋ ์ถ๊ฐ
์คํRISC ; - ํ๋ก์ธ์์ฉ ๋ฐฑ์๋ ์ถ๊ฐ
C-์ค์นด์ด V2 , ๋ค์ํ ์๋น์ ์ฅ์น๋ฅผ ์ํด ๋์ผํ ์ด๋ฆ์ ์ค๊ตญ ํ์ฌ์์ ์์ฐ; - ๋ฐ์ดํธ ๊ฐ์ ์๋ํ๋ ๋ชจ๋ ๋ช ๋ น์ค ์ต์ ์ ์ ๋ฏธ์ฌ kb, KiB, MB, MiB, GB ๋ฐ GiB๋ฅผ ์ง์ํฉ๋๋ค.
-
๊ตฌํ "-flive-patching=[inline-only-static|inline-clone]" ์ต์ ์ ์ฌ์ฉํ๋ฉด ์ ์ฐจ ๊ฐ ์ฌ์ฉ์ ๋ํ ๋ค๋จ๊ณ ์ ์ด๋ก ์ธํด ๋ผ์ด๋ธ ํจ์น ์์คํ ์ ๋ํ ์์ ํ ์ปดํ์ผ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค(IPA ) ์ต์ ํ; - Bash๋ฅผ ์ฌ์ฉํ ๋ ์ต์ ์์ฑ์ ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ธฐ ์ํด "--completion" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ง๋จ ๋๊ตฌ๋ ์ค ๋ฒํธ๋ฅผ ๋ํ๋ด๋ ์์ค ํ
์คํธ ๋ฐ์ท ํ์๋ฅผ ์ ๊ณตํ๊ณ ํผ์ฐ์ฐ์ ์ ํ๊ณผ ๊ฐ์ ๊ด๋ จ ์ ๋ณด๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ํฉ๋๋ค. ์ค ๋ฒํธ์ ๋ ์ด๋ธ ํ์๋ฅผ ๋นํ์ฑํํ๊ธฐ ์ํด "-fno-diagnostics-show-line-numbers" ๋ฐ "-fno-diagnostics-show-labels" ์ต์
์ด ์ ๊ณต๋ฉ๋๋ค.
-
ํผ์ง๋ C++ ์ฝ๋์ ์ค๋ฅ ์ง๋จ ๋๊ตฌ, ์ค๋ฅ ์์ธ์ ๋ํ ์ ๋ณด์ ๊ฐ๋ ์ฑ ํฅ์ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ ๋งค๊ฐ๋ณ์ ๊ฐ์กฐ ํ์ - ๊ธฐ๊ณ๊ฐ ์ฝ์ ์ ์๋ ํ์(JSON)์ผ๋ก ์ง๋จ ์ถ๋ ฅ์ ์์ฑํ ์ ์๋ "-fdiagnostics-format=json" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ฒ๋ฆฌํ ์์ค ํ์ผ์ ์ ํํ๊ธฐ ์ํ ์๋ก์ด ํ๋กํ์ผ๋ง ์ต์ "-fprofile-filter-files" ๋ฐ "-fprofile-exclude-files"๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- AddressSanitizer๋ ์๋ ๋ณ์์ ๋ํ ๋ณด๋ค ๊ฐ๊ฒฐํ ํ์ธ ์ฝ๋ ์์ฑ์ ์ ๊ณตํ์ฌ ๊ฒ์ฌ ์ค์ธ ์คํ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ค์ ๋๋ค.
- "์ ์ถ๋ ฅ์ด ํฅ์๋์์ต๋๋ค.
-fopt-์ ๋ณด ยป (์ถ๊ฐ๋ ์ต์ ํ์ ๋ํ ์์ธํ ์ ๋ณด) ์ด์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ๋์ฌ "note" ์ธ์ ์๋ก์ด ์ ๋์ฌ "optimized" ๋ฐ "missed"๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์ธ๋ผ์ธ ์ ๊ฐ ๋ฐ ์ฌ์ดํด ๋ฒกํฐํ์ ๋ํ ์์ฌ๊ฒฐ์ ์ ๋ํ ์ ๋ณด ์ถ๋ ฅ์ ์ถ๊ฐํ์ต๋๋ค. - "-fsave-optimization-record" ์ต์ ์ ์ถ๊ฐํ๋ฉด GCC๋ ํน์ ์ต์ ํ ์ฌ์ฉ์ ๋ํ ๊ฒฐ์ ์ ๋ํ ์ค๋ช ๊ณผ ํจ๊ป SRCFILE.opt-record.json.gz ํ์ผ์ ์ ์ฅํฉ๋๋ค. ์๋ก์ด ์ต์ ์ ํ๋กํ ๋ฐ ์ธ๋ผ์ธ ์ฒด์ธ์ ๋ํ ์ ๋ณด์ ๊ฐ์ ์ถ๊ฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ค๋ ์ ์์ "-fopt-info" ๋ชจ๋์ ๋ค๋ฆ ๋๋ค.
- ์ ์ฐจ๊ฐ ์ต์ ํ ์ค์ ์คํ ์ ๋ ฌ ๋ฐ ์ ์ ๋ณ์์ ๋ํ ์ฃผ์ ์ง์ ๋ชจ๋(์ฐ๊ธฐ ์ ์ฉ ๋๋ ์ฝ๊ธฐ ์ ํ) ์ฌ์ฉ์ ์ ์ดํ๊ธฐ ์ํด "-fipa-stack-alignment" ๋ฐ "-fipa-reference-addressable" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์์ฑ ๋ฐ์ธ๋ฉ๋ฟ๋ง ์๋๋ผ ๋ถ๊ธฐ ์์ธก ๋ฐ ์์ธก ๋ช
๋ น์ด ์คํ๊ณผ ๊ด๋ จ๋ ๋์์ ์ ์ดํ๊ธฐ ์ํด ์๋ก์ด ๋ด์ฅ ํจ์๊ฐ ๋์
๋์์ต๋๋ค.
__builtin_has_์์ฑ ยซ,ยซ__builtin_expect_with_probability " ๊ทธ๋ฆฌ๊ณ "__builtin_speculation_safe_value ". ํจ์, ๋ณ์, ์ ํ์ ๋ํ ์๋ก์ด ์์ฑ์ด ์ถ๊ฐ๋์์ต๋๋ค.๋ณต์ฌ ; - Fortran ์ธ์ด์ ๋ํด ๋น๋๊ธฐ์ ์ ๋ ฅ/์ถ๋ ฅ์ ๋ํ ์์ ํ ์ง์์ด ๊ตฌํ๋์์ต๋๋ค.
- Solaris 10(*-*-solaris2.10) ๋ฐ Cell/BE(Cell Broadband Engine SPU) ํ๋ซํผ์ ๋ํ ์ง์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค์์ ์ ๊ฑฐ๋ ์์ ์ ๋๋ค. Armv2, Armv3, Armv5 ๋ฐ Armv5E ์ํคํ ์ฒ์ ๋ํ ์ง์์ด ์ค๋จ๋์์ต๋๋ค. Intel MPX(Memory Protection Extensions)์ ๋ํ ์ง์์ด ์ค๋จ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru