Efter et års udvikling, GCC 11.1 compiler suite ny version udgivet, den første betydningsfulde udgivelse i den nye GCC 11.x-filial. Under det nye skema til nummerering af version blev version 11.0 brugt under udviklingen, og kort før frigivelsen af GCC 11.1 var en gren af GCC 12.0 allerede blevet forkælet til at danne den næste store version af GCC 12.1.
GCC 11.1 skiller sig ud for overgangen til standard-fejlretningsfilformatet DWARF 5, standardinddragelsen af C ++ 17-standarden ("-std = gnu ++ 17"), betydelige forbedringer i kompatibilitet med C ++ 20-standarden, eksperimentel understøttelse af C ++ 23, forbedringer relateret til den fremtidige standard for C-sproget (C2x), nye ydeevneoptimeringer.
GCC 11.1 Vigtigste nye funktioner
Standardtilstanden for C ++ - sproget ændres for at bruge C ++ 17-standardeni stedet for den tidligere foreslåede C ++ 14. Det er muligt at deaktivere den nye C ++ 17-opførsel selektivt, når man behandler skabeloner, der bruger andre skabeloner som parameter (-fno-new-ttp-matching).
Tilføjet support til hardwareacceleration af AddressSanitizer-værktøjet, som giver dig mulighed for at bestemme fakta om adgang til frigjorte hukommelsesområder, overskride grænserne for den tildelte buffer og nogle andre typer fejl, når du arbejder med hukommelse. I øjeblikket er hardwareacceleration kun tilgængelig for AArch64-arkitekturen og er fokuseret på brugen, når man kompilerer Linux-kernen.
En anden nyhed, der præsenteres, er optimeringer og forbedringer mellem procedurer, da et nyt IPA-modref-pass blev tilføjet (-fipa-modref) for at spore bivirkninger i funktionsopkald og forbedre analysens nøjagtighed. Udover også en forbedret implementering af IPA-ICF-passet (-fipa-icf), hvilket reducerer kompileringshukommelsesforbruget og øger antallet af samlede funktioner, for hvilke identiske kodeblokke flettes.
El profildrevet optimeringsmotor (PGO), forbedret tilstand "-fprofile-values" ved at holde styr på flere parametre for indirekte opkald.
også Fortsat implementering af OpenMP 5.0-standarden er fremhævet (Open Multi-Processing), hvor tilføjet indledende support til tildelingsdirektivet og evnen til at bruge ikke-ensartede sløjfer i OpenMP-builds. OMP_TARGET_OFFLOAD-miljøvariablen understøttes nu.
Implementeringen af OpenACC 2.6 parallel programmeringsspecifikation tilvejebragt til sprogene C, C ++ og Fortran, der definerer værktøjer til aflæsning af operationer til GPU'er og specialiserede processorer som NVIDIA PTX, er blevet forbedret.
For sprogene i C-familien er en ny attribut "no_stack_protector" blevet implementeret, designet til at markere funktioner, for hvilke stakbeskyttelse ikke skal aktiveres ("-fstack-protector"). Attributten "malloc" er blevet udvidet med understøttelse af identifikation af par af opkald for at allokere og frigøre hukommelse, der bruges i den statiske parser til at detektere typiske hukommelsesfejl (hukommelseslækage, brug efter gratis, dobbeltopkald til fri funktion osv.) og advarsler om kompilatoren "-Wmismatched-dealloc", "-Wmismatched- new-delete" og " -Wfree-nonheap-object "rapporterer inkonsekvente deallocation- og deallocation-operationer.
Når der genereres fejlretningsoplysninger, bruges DWARF 5-formatet som standard, hvilket sammenlignet med tidligere versioner tillader generering af fejlretningsdata, der er 25% mere kompakte. Fuld DWARF 5 support kræver binutils mindst version 2.35.2.
Udvidede funktioner i ThreadSanitizer-tilstand (-fsanitize = tråd), da jae tilføjer support til alternative driftstider og miljøer, samt understøttelse af fejlfindingsværktøjet Kernel Concurrency Sanitizer (KCSAN) til dynamisk detektion af raceforhold inden for Linux-kernen. Tilføjede nye muligheder "–param tsan-distinkt-flygtig" og "–param tsan-instrument-func-entry-exit".
Vectorizer giver regnskab for alt funktionsindhold og yderligere behandlingsfunktioner forbundet med tidligere blokreferencer og skæringspunkter i kontrolflowdiagrammet (CFG).
Optimizer har evnen til at konvertere en række betingede operationer til et ændringsudtryk, hvor den samme variabel sammenlignes. I fremtiden kan ændringsudtrykket kodes ved hjælp af bit-testinstruktioner (for at kontrollere denne konvertering er indstillingen "-fbit-tests" tilføjet).
For C ++ er en del af de ændringer og innovationer, der er foreslået i C ++ 20-standarden, blevet implementeret, herunder de virtuelle funktioner "consteval virtual", pseudo-destroyere til afslutning af objekters livscyklus ved hjælp af enumklassen og beregning størrelsen på en matrix i udtrykket "ny".
Hvis du vil vide mere om det, kan du tjekke detaljerne i følgende link.