
Давайте кратко посмотрим, что интересного разработчики GCC предлагают нам.
- Link Time Optimization. По умолчанию оптимизация происходит только на уровне юнита компиляции (файла), но с новой версией GCC вы можете оптимизировать бинарный код на уровне приложения. Код для LTO имелся еще в 4.5, но разработчики посчитали реализацию сырой и не включили в предыдущий релиз. Сейчас же LTO работает отлично на больших опенсорсных проектах (GCC, Mozilla) — время попробовать ее и на вашем проекте. LTO ведет к значительному сокращению конечного файла, а также увеличивает скорость работы приложения. Но ничего не дается бесплатно — происходит увеличение размера промежуточных (*.o) файлов и растет потребность компилятора в памяти.
- Улучшение скоростных характеристик самого компилятора. Видимо это является ответом на критику со стороны Clang/LLVM. Теперь GCC компилирует ~ на 10% быстрее и требует меньше памяти.
- Добавлена экспериментальная поддержка некоторых фич из будущих стандартов C++0x и C1X.
- Появился frontend для языка Go. Скажем спасибо Ину Тейлору.
- Добавлена поддержка процессоров Cortex-M4.
- Теперь GCC корректно работает с Core Foundation на MacOSX. Это позволяет использовать версию 4.6 вместо устаревшей (4.2) из XCode.
- Реализован SplitStack на платформе x86/64. Теперь не нужно выделять огромный неделимый кусок памяти для стека процесса. SplitStack позволяет выделять память под стек динамически в куче. Это дает возможность масштабировать количество процессов/co-routines в 32-битном аддресном пространстве до нескольких миллионов.