GCC 11.1 уже выпущен, это его самые важные новости и изменения

После года разработки Выпущена новая версия компилятора 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), новые оптимизации производительности.

GCC 11.1 Основные новые функции

Режим по умолчанию для языка C ++ изменен на использование стандарта C ++ 17., вместо ранее предложенного C ++ 14. Можно выборочно отключить новое поведение C ++ 17 при обработке шаблонов, которые используют другие шаблоны в качестве параметра (-fno-new-ttp-matching).

Добавлена ​​поддержка аппаратного ускорения. инструмента AddressSanitizer, позволяющего определять факты доступа к освобожденным областям памяти, превышения лимитов выделенного буфера и некоторых других типов ошибок при работе с памятью. В настоящее время аппаратное ускорение доступно только для архитектуры AArch64 и ориентировано на его использование при компиляции ядра Linux.

Еще одна представленная новинка - это оптимизации и улучшения между процедурами, поскольку был добавлен новый проход IPA-modref (-fipa-modref) для отслеживания побочных эффектов при вызове функций и повышения точности анализа. Кроме того, улучшенная реализация прохода IPA-ICF (-fipa-icf), что снижает потребление памяти компиляцией и увеличивает количество унифицированных функций, для которых объединяются идентичные блоки кода.

El механизм оптимизации на основе профиля (ПГО), улучшенный режим "-fprofile-values" отслеживая дополнительные параметры для косвенных вызовов.

также Выделено продолжение реализации стандарта OpenMP 5.0. (Открытая мультиобработка), в которой добавлена ​​начальная поддержка директивы присваивания и возможность использовать неравномерные циклы в сборках OpenMP. Теперь поддерживается переменная среды OMP_TARGET_OFFLOAD.

Была улучшена реализация спецификации параллельного программирования OpenACC 2.6 для языков C, C ++ и Fortran, которая определяет инструменты для разгрузки операций на графические процессоры и специализированные процессоры, такие как NVIDIA PTX.

Для языков семейства C реализован новый атрибут no_stack_protector, предназначен для обозначения функций, для которых не должна быть включена защита стека ("-fstack-protector"). Атрибут "malloc" был расширен поддержкой определения пар вызовов для выделения и освобождения памяти., который используется в статическом синтаксическом анализаторе для обнаружения типичных ошибок памяти (утечки памяти, использование после освобождения, двойные вызовы функции освобождения и т. д.) и предупреждений компилятора «-Wmismatched-dealloc», «-Wmismatched- new-delete» и « -Wfree-nonheap-object »сообщает о несогласованных операциях освобождения и освобождения.

При генерации отладочной информации по умолчанию используется формат DWARF 5, который, по сравнению с предыдущими версиями, позволяет генерировать отладочные данные, которые на 25% компактнее. Для полной поддержки DWARF 5 требуется binutils как минимум версии 2.35.2.

Расширенные возможности режима ThreadSanitizer (-fsanitize = thread), поскольку даe добавляет поддержку альтернативных сред выполнения и сред, а также поддержку инструмента отладки Kernel Concurrency Sanitizer (KCSAN) для динамического обнаружения состояний гонки в ядре Linux. Добавлены новые опции «–парам цан-различать-летучие» и «–парам цан-инструмент-функция-вход-выход».

Векторизатор обеспечивает учет всего содержимого функции и дополнительную обработку возможностей, связанных с пересечениями и ссылками на предыдущие блоки в блок-схеме управления (CFG).

Оптимизатор имеет возможность преобразовывать серию условных операций в выражение изменения, в котором сравнивается одна и та же переменная. В будущем выражение изменения можно будет кодировать с помощью инструкций битового тестирования (для управления этим преобразованием была добавлена ​​опция «-fbit-tests»).

Для C ++ реализована часть изменений и нововведений, предложенных в стандарте C ++ 20, в том числе виртуальные функции consteval virtual, псевдо-разрушители для завершения жизненного цикла объектов, использование класса enum и вычисление размер массива в выражении «новый».

Если вы хотите узнать об этом больше, вы можете проверить подробности в по следующей ссылке. 


Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.