GCC 11 ์ปดํŒŒ์ผ๋Ÿฌ ์ œํ’ˆ๊ตฐ ์ถœ์‹œ

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€