GCC 11.1 è già stato rilasciato, queste sono le novità e le modifiche più importanti

Dopo un anno di sviluppo, rilasciata la nuova versione della suite del compilatore GCC 11.1, la prima significativa release nel nuovo branch di GCC 11.x. Con il nuovo schema di numerazione delle versioni, la versione 11.0 è stata utilizzata durante lo sviluppo e, poco prima del rilascio di GCC 11.1, un ramo di GCC 12.0 era già stato biforcato per formare la prossima versione principale di GCC 12.1.

GCC 11.1 si distingue per il passaggio al formato di file di debug predefinito DWARF 5, l'inclusione predefinita dello standard C ++ 17 ("-std = gnu ++ 17"), miglioramenti significativi nella compatibilità con lo standard C ++ 20, supporto sperimentale per C ++ 23, miglioramenti relativi al futuro standard di il linguaggio C (C2x), nuove ottimizzazioni delle prestazioni.

GCC 11.1 Nuove funzionalità principali

La modalità predefinita per il linguaggio C ++ è stata modificata per utilizzare lo standard C ++ 17, invece del C ++ 14 proposto in precedenza. È possibile disabilitare selettivamente il nuovo comportamento di C ++ 17 durante l'elaborazione di modelli che utilizzano altri modelli come parametro (-fno-new-ttp-matching).

Aggiunto supporto per l'accelerazione hardware dello strumento AddressSanitizer, che consente di determinare i fatti dell'accesso alle aree di memoria liberate, il superamento dei limiti del buffer allocato e alcuni altri tipi di errori quando si lavora con la memoria. Attualmente, l'accelerazione hardware è disponibile solo per l'architettura AArch64 e si concentra sul suo utilizzo durante la compilazione del kernel Linux.

Un'altra novità che viene presentata sono i ottimizzazioni e miglioramenti tra le procedure, poiché è stato aggiunto un nuovo passaggio IPA-modref (-fipa-modref) per tenere traccia degli effetti collaterali nelle chiamate di funzione e migliorare l'accuratezza dell'analisi. Oltre anche a implementazione migliorata del pass IPA-ICF (-fipa-icf), che riduce il consumo di memoria di compilazione e aumenta il numero di funzioni unificate per le quali vengono uniti blocchi di codice identici.

El motore di ottimizzazione basato sul profilo (DGP), modalità "-fprofile-values" migliorata tenendo traccia di più parametri per le chiamate indirette.

anche Viene evidenziata l'implementazione continua dello standard OpenMP 5.0 (Open Multi-Processing), in cui aggiunto il supporto iniziale per la direttiva di assegnazione e la possibilità di utilizzare cicli non uniformi nelle build OpenMP. La variabile d'ambiente OMP_TARGET_OFFLOAD è ora supportata.

L'implementazione della specifica di programmazione parallela OpenACC 2.6 fornita per i linguaggi C, C ++ e Fortran, che definisce gli strumenti per l'offload delle operazioni su GPU e processori specializzati come NVIDIA PTX, è stata migliorata.

Per i linguaggi della famiglia C è stato implementato un nuovo attributo "no_stack_protector", progettato per contrassegnare le funzioni per le quali la protezione dello stack non dovrebbe essere abilitata ("-fstack-protector"). L'attributo "malloc" è stato esteso con il supporto per identificare coppie di chiamate da allocare e liberare memoria, che viene utilizzato nel parser statico per rilevare errori di memoria tipici (perdite di memoria, utilizzo dopo free, doppie chiamate alla funzione free, ecc.) e avvisi del compilatore "-Wmismatched-dealloc", "-Wmismatched- new-delete" e " -Wfree-nonheap-object "che riporta operazioni di deallocazione e deallocazione incoerenti.

Durante la generazione delle informazioni di debug, per impostazione predefinita viene utilizzato il formato DWARF 5, che, rispetto alle versioni precedenti, consente la generazione di dati di debug più compatti del 25%. Il pieno supporto DWARF 5 richiede binutils almeno la versione 2.35.2.

Funzionalità avanzate della modalità ThreadSanitizer (-fsanitize = thread), poiché sìe aggiunge il supporto per runtime e ambienti alternativi, oltre al supporto per lo strumento di debug Kernel Concurrency Sanitizer (KCSAN) per rilevare dinamicamente le condizioni di competizione all'interno del kernel Linux. Aggiunte nuove opzioni "–param tsan-distinguish-volatile" e "–param tsan-instrument-func-entry-exit".

Il vettorizzatore fornisce la contabilità di tutto il contenuto della funzione e l'elaborazione aggiuntiva delle capacità associate alle intersezioni e ai riferimenti a blocchi precedenti nel diagramma di flusso di controllo (CFG).

L'ottimizzatore ha la capacità di convertire una serie di operazioni condizionali in un'espressione di cambiamento, in cui viene confrontata la stessa variabile. In futuro, l'espressione di modifica può essere codificata utilizzando istruzioni di test di bit (per controllare questa conversione, è stata aggiunta l'opzione "-fbit-tests").

Per C ++, una parte delle modifiche e delle innovazioni proposte nello standard C ++ 20 sono state implementate, incluse le funzioni virtuali "consteval virtual", pseudo-distruttori per terminare il ciclo di vita degli oggetti, usando la classe enum e calcolando la dimensione di un array nell'espressione "new".

Se vuoi saperne di più, puoi controllare i dettagli in il seguente collegamento. 


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.