Po roce vývoje Byla vydána nová verze kompilátoru GCC 11.1, první významné vydání v nové větvi GCC 11.x. V rámci nového schématu číslování verzí byla během vývoje použita verze 11.0 a krátce před vydáním GCC 11.1 již byla větev GCC 12.0 rozdvojena, aby vytvořila další hlavní verzi GCC 12.1.
GCC 11.1 vyniká přechodem na výchozí formát souboru ladění DWARF 5, výchozí zahrnutí standardu C ++ 17 ("-std = gnu ++ 17"), významná vylepšení kompatibility se standardem C ++ 20, experimentální podpora pro C ++ 23, vylepšení týkající se budoucího standardu jazyk C (C2x), nová optimalizace výkonu.
GCC 11.1 Hlavní nové funkce
Výchozí režim pro jazyk C ++ je změněn tak, aby používal standard C ++ 17, místo dříve navrženého C ++ 14. Je možné selektivně zakázat nové chování C ++ 17 při zpracování šablon, které jako parametr používají jiné šablony (-fno-new-ttp-matching).
Přidaná podpora pro hardwarovou akceleraci nástroje AddressSanitizer, který umožňuje určit fakta o přístupu k oblastem uvolněné paměti, překročení limitů přidělené vyrovnávací paměti a některých dalších typů chyb při práci s pamětí. V současné době je hardwarová akcelerace k dispozici pouze pro architekturu AArch64 a je zaměřena na její použití při kompilaci linuxového jádra.
Další novinkou, která je představena, je optimalizace a vylepšení mezi postupy, protože byl přidán nový IPA-modref pass (-fipa-modref) pro sledování vedlejších účinků při volání funkcí a zlepšení přesnosti analýzy. Kromě toho také a vylepšená implementace povolení IPA-ICF (-fipa-icf), což snižuje spotřebu paměti kompilace a zvyšuje počet sjednocených funkcí, pro které jsou sloučeny identické bloky kódu.
El profilem řízený optimalizační motor (PGO), vylepšený režim „-fprofile-values“ sledováním více parametrů pro nepřímá volání.
také Je zdůrazněna pokračující implementace standardu OpenMP 5.0 (Open Multi-Processing), ve kterém přidána počáteční podpora pro direktivu přiřazení a možnost používat nejednotné smyčky v sestavení OpenMP. Proměnná prostředí OMP_TARGET_OFFLOAD je nyní podporována.
Byla vylepšena implementace specifikace paralelního programování OpenACC 2.6 poskytovaná pro jazyky C, C ++ a Fortran, která definuje nástroje pro odlehčení operací na GPU a specializované procesory, jako je NVIDIA PTX.
Pro jazyky rodiny C byl implementován nový atribut „no_stack_protector“, navrženo k označení funkcí, pro které by neměla být povolena ochrana zásobníku ("-fstack-protector"). Atribut "malloc" byl rozšířen o podporu pro identifikaci párů hovorů k přidělení a uvolnění paměti, který se používá ve statickém analyzátoru k detekci typických chyb paměti (úniky paměti, využití po volném čase, zdvojnásobení volání funkce zdarma atd.) a varování kompilátoru „-Wmismatched-dealloc“, „-Wmismatched- new-delete“ a -Wfree-nonheap-object "hlášení nekonzistentního přidělení a operací přidělení.
Při generování informací o ladění se ve výchozím nastavení používá formát DWARF 5, který ve srovnání s předchozími verzemi umožňuje generování dat ladění, které je o 25% kompaktnější. Plná podpora DWARF 5 vyžaduje binutils alespoň ve verzi 2.35.2.
Vylepšené funkce režimu ThreadSanitizer (-fsanitize = vlákno), protože anoe přidává podporu pro alternativní runtime a prostředí, stejně jako podpora pro ladicí nástroj Kernel Concurrency Sanitizer (KCSAN) pro dynamickou detekci podmínek závodu v jádře Linuxu. Byly přidány nové možnosti „–param tsan-rozlišit-volatilní“ a „–param tsan-instrument-func-entry-exit“.
Vektorizér poskytuje účtování veškerého obsahu funkce a další zpracování funkcí spojených s průniky a odkazy na předchozí bloky v řídicím vývojovém diagramu (CFG).
Optimalizátor má schopnost převést řadu podmíněných operací na výraz změny, ve kterém se porovnává stejná proměnná. V budoucnu lze výraz změny zakódovat pomocí pokynů pro bitové testy (pro ovládání tohoto převodu byla přidána možnost „-fbit-tests“).
Pro C ++ byla implementována část změn a inovací navržených ve standardu C ++ 20, včetně virtuálních funkcí „consteval virtual“, pseudodestruktorů pro ukončení životního cyklu objektů, použití třídy enum a výpočtu velikost pole ve výrazu „nový“.
Pokud se o tom chcete dozvědět více, můžete zkontrolovat podrobnosti v následující odkaz.