GCC 11.1 zostało już wydane, to jego najważniejsze nowości i zmiany

Po roku rozwoju, Nowa wersja zestawu kompilatorów GCC 11.1 została wydana, pierwsze znaczące wydanie w nowej gałęzi GCC 11.x. Zgodnie z nowym schematem numerowania wersji, wersja 11.0 była używana podczas rozwoju, a krótko przed wydaniem GCC 11.1 gałąź GCC 12.0 została już rozwidlona, ​​aby utworzyć następną główną wersję GCC 12.1.

GCC 11.1 wyróżnia się przejściem do domyślnego formatu pliku debugowania DWARF 5, domyślne włączenie standardu C ++ 17 („-std = gnu ++ 17”), znaczące ulepszenia zgodności ze standardem C ++ 20, eksperymentalne wsparcie dla C ++ 23, ulepszenia związane z przyszłym standardem język C (C2x), nowe optymalizacje wydajności.

GCC 11.1 Główne nowe funkcje

Domyślny tryb języka C ++ został zmieniony tak, aby używał standardu C ++ 17, zamiast wcześniej proponowanego C ++ 14. Możliwe jest selektywne wyłączenie nowego zachowania C ++ 17 podczas przetwarzania szablonów, które używają innych szablonów jako parametru (-fno-new-ttp-matching).

Dodano obsługę akceleracji sprzętowej narzędzia AddressSanitizer, które pozwala określić fakty dotyczące uzyskiwania dostępu do zwolnionych obszarów pamięci, przekraczania limitów przydzielonego bufora i niektórych innych typów błędów podczas pracy z pamięcią. Akceleracja sprzętowa jest obecnie dostępna tylko dla architektury AArch64 i koncentruje się na jej wykorzystaniu podczas kompilowania jądra Linuksa.

Kolejną prezentowaną nowością są optymalizacje i ulepszenia między procedurami, ponieważ dodano nową przepustkę IPA-modref (-fipa-modref) do śledzenia efektów ubocznych w wywołaniach funkcji i poprawiania dokładności analizy. Poza tym również a ulepszona implementacja przepustki IPA-ICF (-fipa-icf), co zmniejsza zużycie pamięci kompilacji i zwiększa liczbę ujednoliconych funkcji, dla których łączone są identyczne bloki kodu.

El silnik optymalizacji sterowany profilami (PGO), ulepszony tryb „-fprofile-wartości” śledząc więcej parametrów dla połączeń pośrednich.

również Zwrócono uwagę na dalsze wdrażanie standardu OpenMP 5.0 (Open Multi-Processing), w którym dodano początkową obsługę dyrektywy przypisania i możliwość używania niejednolitych pętli w kompilacjach OpenMP. Obsługiwana jest teraz zmienna środowiskowa OMP_TARGET_OFFLOAD.

Udoskonalono implementację specyfikacji programowania równoległego OpenACC 2.6 dla języków C, C ++ i Fortran, która definiuje narzędzia do przenoszenia operacji na GPU i wyspecjalizowane procesory, takie jak NVIDIA PTX.

Dla języków z rodziny C zaimplementowano nowy atrybut „no_stack_protector”, zaprojektowany do oznaczania funkcji, dla których ochrona stosu nie powinna być włączona („-fstack-protector”). Atrybut „malloc” został rozszerzony o obsługę identyfikowania par wywołań do przydzielenia i zwolnienia pamięci, który jest używany w parserze statycznym do wykrywania typowych błędów pamięci (wycieki pamięci, użycie po zwolnieniu, podwójne wywołania funkcji zwolnienia itp.) i ostrzeżeń kompilatora „-Wmismatched-dealloc”, „-Wmismatched- new-delete” i „ -Wfree-nonheap-object ”zgłaszanie niespójnych operacji zwalniania i zwalniania alokacji.

Podczas generowania informacji debugowania domyślnie używany jest format DWARF 5, który w porównaniu z poprzednimi wersjami umożliwia generowanie danych debugowania, które są o 25% bardziej zwarte. Pełna obsługa DWARF 5 wymaga binutils w wersji co najmniej 2.35.2.

Rozszerzone możliwości trybu ThreadSanitizer (-fsanitize = wątek), ponieważ take dodaje obsługę alternatywnych środowisk wykonawczych i środowisk, a także obsługę narzędzia do debugowania Kernel Concurrency Sanitizer (KCSAN) w celu dynamicznego wykrywania warunków wyścigu w jądrze Linuksa. Dodano nowe opcje „–param tsan-wyrózniaj-volatile” i „–param tsan-instrument-func-entry-exit”.

Wektoryzator zapewnia rozliczanie całej zawartości funkcji i dodatkowe przetwarzanie możliwości związanych z przecięciami i odniesieniami do poprzednich bloków w schemacie blokowym sterowania (CFG).

Optymalizator ma możliwość konwersji serii operacji warunkowych na wyrażenie zmiany, w którym porównywana jest ta sama zmienna. W przyszłości wyrażenie zmiany będzie można zakodować za pomocą instrukcji testu bitowego (aby sterować tą konwersją, dodano opcję „-fbit-tests”).

W przypadku C ++ zaimplementowano część zmian i innowacji zaproponowanych w standardzie C ++ 20, w tym funkcje wirtualne „consteval virtual”, pseudo-niszczyciele do kończenia cyklu życia obiektów, wykorzystanie klasy enum i obliczanie rozmiar tablicy w wyrażeniu „nowy”.

Jeśli chcesz dowiedzieć się więcej na ten temat, możesz sprawdzić szczegóły w poniższy link. 


Bądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.