ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° компилаторния ΠΏΠ°ΠΊΠ΅Ρ‚ GCC 11

Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° бСшС пусната вСрсията Π½Π° бСзплатния ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ GCC 11.1, ΠΏΡŠΡ€Π²Π°Ρ‚Π° Π·Π½Π°Ρ‡ΠΈΠΌΠ° вСрсия Π² новия ΠΊΠ»ΠΎΠ½ Π½Π° GCC 11.x. Бъгласно Π½ΠΎΠ²Π°Ρ‚Π° схСма Π·Π° Π½ΠΎΠΌΠ΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° вСрсиитС, вСрсия 11.0 бСшС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΈ пусканСто Π½Π° GCC 11.1, ΠΊΠ»ΠΎΠ½ΡŠΡ‚ GCC 12.0 Π²Π΅Ρ‡Π΅ бСшС Ρ€Π°Π·Π΄Π²ΠΎΠ΅Π½, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π° слСдващата Π·Π½Π°Ρ‡ΠΈΠΌΠ° вСрсия Π½Π° GCC 12.1.

GCC 11.1 сС ΠΎΡ‚Π»ΠΈΡ‡Π°Π²Π° с ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π° си към ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° файловия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ DWARF 5 ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° стандарта C++17 (β€œ-std=gnu++17”), Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ подобрСния Π² ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° C++20 стандарт, СкспСримСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° C++23, подобрСния, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ Π΅Π·ΠΈΠΊΠΎΠ² стандарт C (C2x), Π½ΠΎΠ²ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° производитСлността.

Основни ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ:

  • Π Π΅ΠΆΠΈΠΌΡŠΡ‚ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° Π΅Π·ΠΈΠΊΠ° C++ Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° стандарта C++17 (-std=gnu++17) вмСсто прСдлагания ΠΏΠΎ-Ρ€Π°Π½ΠΎ C++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=*".
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° двоичния Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ BRIG Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ с Π΅Π·ΠΈΠΊΠ° HSAIL (ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° Ρ…Π΅Ρ‚Π΅Ρ€ΠΎΠ³Π΅Π½Π½Π° систСмна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°) Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½Π° ΠΈ скоро Ρ‰Π΅ бъдС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚Π°.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠ° ThreadSanitizer (-fsanitize=thread) са Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Ρ‚ условия Π½Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ сподСлянС Π½Π° Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ нишки Π½Π° многонишково ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Новата вСрсия добавя ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π° Π½Π° изпълнСниС ΠΈ срСди, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° инструмСнта Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ KCSAN (Kernel Concurrency Sanitizer), ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° условия Π½Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅ Π² ядрото Π½Π° Linux. Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Π½ΠΎΠ²ΠΈ ΠΎΠΏΡ†ΠΈΠΈ β€ž-param tsan-distinguish-volatileβ€œ ΠΈ β€ž-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) Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΡŠΡ‚ Π½Π° Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ Π·Π° намаляванС Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ подобряванС Π½Π° скоростта Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. НамалСна ΠΏΠΈΠΊΠΎΠ²Π° консумация Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ„Π°Π·Π°Ρ‚Π° Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅.
  • Π’ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° оптимизация, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π° (PGO - Profile-guided optimization), ΠΊΠΎΠΉΡ‚ΠΎ позволява Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎ-ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½ ΠΊΠΎΠ΄ въз основа Π½Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π·Π° изпълнСниС, Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ с GCOV Π΄Π°Π½Π½ΠΈ Π΅ Π½Π°ΠΌΠ°Π»Π΅Π½ ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΏΠΎ-ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° Π½ΡƒΠ»Π΅Π²ΠΈ броячи . ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ "-fprofile-values" Ρ‡Ρ€Π΅Π· прослСдяванС Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈ ΠΈΠ½Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈ повиквания.
  • ВнСдряванСто Π½Π° стандарта OpenMP 5.0 (Open Multi-Processing), ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° API ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° многоядрСни ΠΈ Ρ…ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΈ (CPU+GPU/DSP) систСми със сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†ΠΈ Π·Π° вСкторизация (SIMD), ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ‚Π° Π·Π° разпрСдСлянС ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ…Π΅Ρ‚Π΅Ρ€ΠΎΠ³Π΅Π½Π½ΠΈ Ρ†ΠΈΠΊΠ»ΠΈ Π² OpenMP конструкции. Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата OMP_TARGET_OFFLOAD.
  • РСализацията Π½Π° спСцификацията Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ OpenACC 2.6, прСдоставСна Π·Π° Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ C, C++ ΠΈ Fortran, Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° инструмСнти Π·Π° Ρ€Π°Π·Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Ρ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° GPU ΠΈ спСциализирани процСсори, ΠΊΠ°Ρ‚ΠΎ NVIDIA PTX.
  • Π—Π° Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ C Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ Π½ΠΎΠ² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ β€žno_stack_protectorβ€œ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π΄Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‚Π°Ρ‚Π° Π½Π° стСка Π½Π΅ трябва Π΄Π° бъдС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° (β€ž-fstack-protectorβ€œ). ΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ β€žmallocβ€œ Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π²ΠΎΠΉΠΊΠΈ извиквания Π·Π° разпрСдСлянС ΠΈ освобоТдаванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ (Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»/освобоТдаванС), ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² статичния Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΠ΅Ρ‚ (ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ слСд освобоТдаванС, Π΄Π²ΠΎΠΉΠ½ΠΈ извиквания към Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½Π°Ρ‚Π° функция ΠΈ Ρ‚.Π½.) ΠΈ Π² прСдупрСТдСнията Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° β€ž-Wmismatched-deallocβ€œ, β€ž-Wmismatched-new-deleteβ€œ ΠΈ β€ž-Wfree-nonheap-objectβ€œ, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°ΠΉΠΊΠΈ Π·Π° Π½Π΅ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° освобоТдаванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ разпрСдСлянС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Π½ΠΎΠ²ΠΈ прСдупрСТдСния Π·Π° Π΅Π·ΠΈΠΊΠ° C:
    • β€ž-Wmismatched-deallocβ€œ (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅) – ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π²Π° Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° освобоТдаванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π», ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π·Π° разпрСдСлянС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚.
    • β€ž-Wsizeof-array-divβ€œ (Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ посочСно β€ž-Wallβ€œ) – ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π²Π° Π·Π° раздСлянСто Π½Π° Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° sizeof, Π°ΠΊΠΎ дСлитСлят Π½Π΅ съвпада с Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° Π½Π° масива.
    • β€ž-Wstringop-overreadβ€œ (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅) – ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π²Π° Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° функция Π·Π° Π½ΠΈΠ·, която Ρ‡Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ област извън Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ‚Π° Π½Π° масива.
    • β€ž-Wtsanβ€œ (Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅) – ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π²Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΊΠ°Ρ‚ΠΎ std::atomic_thread_fence), ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Π² ThreadSanitizer.
    • β€ž-Warray-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€β€œ ΠΈ β€ž-Wvla-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€β€œ (Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° β€ž-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_SNAN, DEC_INFINITY ΠΈ DEC _NAN, NaN=макроси Π·Π° FloatN, _FloatNx ΠΈ _DecimalN, Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π·Π½Π°Ρ†ΠΈ Π·Π° прСскачанС ΠΏΡ€Π΅Π΄ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π² края Π½Π° ΡΡŠΡΡ‚Π°Π²Π½ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ.
  • Π—Π° C++ са Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ част ΠΎΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΈ Π½ΠΎΠ²ΠΎΠ²ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΡΡ‚Π°, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ Π² стандарта C++20, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€žconsteval virtualβ€œ, псСвдодСструктори Π·Π° края Π½Π° ТизнСния Ρ†ΠΈΠΊΡŠΠ» Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° enum клас ΠΈ изчисляванС Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° масив Π² β€žΠ½ΠΎΠ²ΠΈΡβ€œ ΠΈΠ·Ρ€Π°Π·.
  • Π—Π° C++ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° СкспСримСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° някои подобрСния, ΠΊΠΎΠΈΡ‚ΠΎ сС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ Π·Π° Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ стандарт C++23 (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2Π±). НапримСр, Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° литСралния суфикс β€žzuβ€œ Π·Π° стойности size_t със Π·Π½Π°ΠΊ.
  • libstdc++ ΠΈΠΌΠ° ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° стандарта C++17, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° std::from_chars ΠΈ std::to_chars Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ с ΠΏΠ»Π°Π²Π°Ρ‰Π° запСтая. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈ са Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° стандарта C++20, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ std::bit_cast, std::source_location, Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‡Π°ΠΊΠ°Π½Π΅ ΠΈ увСдомяванС, , , , , ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ C++ стандарт 23 (std::to_underlying, std::is_scoped_enum). Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ СкспСримСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ (SIMD, Data-Parallel Types). ВнСдряванСто Π½Π° std::uniform_int_distribution Π΅ ускорСно.
  • ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΎ Π΅ Π·Π½Π°ΠΌΠ΅Ρ‚ΠΎ Π·Π° Π°Π»Ρ„Π° качСство ΠΎΡ‚ libgccjit, сподСлСна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Π²Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° ΠΊΠΎΠ΄ Π² Π΄Ρ€ΡƒΠ³ΠΈ процСси ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° JIT компилация Π½Π° Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ Π² машинСн ΠΊΠΎΠ΄. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° libgccjit Π·Π° MinGW.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° 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), ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ само Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° AArch64.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) ΠΈ MVE (AArch32 M-ΠΏΡ€ΠΎΡ„ΠΈΠ») SIMD инструкции Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‰ΠΈ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅, ΠΈΠ·Π²Π°ΠΆΠ΄Π°Π½Π΅, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ Π½Π° добавянС/ΠΈΠ·Π²Π°ΠΆΠ΄Π°Π½Π΅ ΠΏΡ€Π΅Π· комплСксни числа. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° автовСкторизация Π·Π° ARM с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π½Π°Π±ΠΎΡ€Π° инструкции MVE.
  • Π—Π° ARM ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ сС прСдоставя пълСн Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΈ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° C Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Intrinsics), Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΈ ΠΎΡ‚ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΈ инструкции (SIMD), ΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ‰ΠΈ всички NEON инструкции, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ Π² спСцификацията Π½Π° ACLE Q3 2020.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° gfx908 GPU Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° към Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π·Π° AMD GPU, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠ°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° GCN.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π½ΠΎΠ²ΠΈ процСсори ΠΈ Π½ΠΎΠ²ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π·Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ инструкции, Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ Π² тях:
    • 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, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Rocket Lake Π±Π΅Π· ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° SGX).
    • AMD Zen 3 (-march=znver3).
  • Π—Π° систСми IA-32/x86-64, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° процСсори Intel, Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π½ΠΎΠ²ΠΈ процСсорни инструкции TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ„Π»Π°Π³ΠΎΠ²Π΅ "-march=x86-64-v[234]" Π·Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° Π½ΠΈΠ²Π° Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° x86-64 (v2 - ΠΎΠ±Ρ…Π²Π°Ρ‰Π° SSE4.2, SSSE3, POPCNT ΠΈ CMPXCHG16B Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ; v3 - AVX2 ΠΈ MOVBE; v4 - AVX-512 ) .
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° RISC-V систСми с ΠΏΠΎΠ΄Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π±Π°ΠΉΡ‚ΠΎΠ²Π΅Ρ‚Π΅ с голям Ρ€Π΅Π΄. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ опция "-misa-spec=*" Π·Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° вСрсията Π½Π° спСцификацията Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° Π½Π°Π±ΠΎΡ€Π° инструкции RISC-V. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° AddressSanitizer ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° Π½Π° стСка с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° canary Ρ‚Π°Π³ΠΎΠ²Π΅.
  • ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°Ρ‰ΠΎ подобряванС Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Π·Π° статичСн Π°Π½Π°Π»ΠΈΠ· β€ž-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 (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π΅ плъгин Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ (GIL) Π² CPython).

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€