GCC 11.1 вече е издаден, това са най-важните новини и промени

След една година на развитие, Пусната нова версия на GCC 11.1 compiler suite, първата значима версия в новия клон на 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-match).

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

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

El двигател за оптимизация, управляван от профили (PGO), подобрен режим "-fprofile-values" чрез проследяване на повече параметри за непреки повиквания.

също Постоянното прилагане на стандарта OpenMP 5.0 е подчертано (Open Multi-Processing), в който добавена първоначална поддръжка за директива за присвояване и възможност за използване на неравномерни цикли в компилации на 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 = нишка), тъй като даe добавя поддръжка за алтернативни времена на изпълнение и среда, както и поддръжка на инструмента за отстраняване на грешки на Kernel Concurrency Sanitizer (KCSAN) за динамично откриване на състезателни условия в ядрото на Linux. Добавени са нови опции „–param tsan-разграничаване-летливи“ и „–param tsan-instrument-func-влизане-изход“.

Векторизаторът осигурява отчитане на цялото съдържание на функцията и допълнителна обработка на възможностите, свързани с пресичанията и препратки към предишни блокове в контролната схема (CFG).

Оптимизаторът има способността да преобразува поредица от условни операции в израз за промяна, в който се сравнява същата променлива. В бъдеще изразът за промяна може да бъде кодиран с помощта на инструкции за битов тест (за управление на това преобразуване е добавена опцията "-fbit-tests").

За C ++ са внедрени част от промените и иновациите, предложени в стандарта C ++ 20, включително виртуалните функции "consteval virtual", псевдоразрушители за прекратяване на жизнения цикъл на обектите, използване на класа enum и изчисляване размера на масив в израза "нов".

Ако искате да научите повече за това, можете да проверите подробностите в следната връзка. 


Съдържанието на статията се придържа към нашите принципи на редакторска етика. За да съобщите за грешка, щракнете върху тук.

Бъдете първите, които коментират

Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

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