В чем основные различия между LLVM GCC 4.2 и Apple LLVM compiler 3.1?
Я новичок в компиляторах, поэтому приветствую любую помощь. Также меня особенно интересует, как два компилятора могут повлиять на производительность игры.
В чем основные различия между LLVM GCC 4.2 и Apple LLVM compiler 3.1?
Я новичок в компиляторах, поэтому приветствую любую помощь. Также меня особенно интересует, как два компилятора могут повлиять на производительность игры.
Разница заключается как в технологии, так и в скорости.
CLANG был еще молод и имел ошибки, когда Apple начала переход от компилятора и инструментальной цепочки GCC, поэтому LLVM был построен как бэкэнд для GCC, чтобы облегчить его возможную замену. Итак, код вошел и был скомпилирован GCC в некую промежуточную форму, но был отправлен в LLVM для предоставления окончательного машинного кода и упаковки.
В конце концов, LLVM и особенно CLANG стали достаточно зрелыми, чтобы полностью заменить GCC, что обеспечило поразительный прирост скорости компиляции и повышение качества вывода машинного кода (хотя многие утверждают, что GCC по-прежнему производит код более высокого качества за счет скорости) .
Но чтобы решить вашу озабоченность по поводу производительности игры: хотя CLANG может обеспечить «лучший» опыт компиляции, производительность - это не задача компилятора. Хотя оптимизация и упрощения являются частью процесса компиляции, тот факт, что люди по-прежнему пишут медленные игры или создают бесконечные циклы, которые наносят ущерб стеку, показывает, что производительность - это ваша работа. Компилятор может делать только определенное количество операций, остальное зависит от вас. Тип или поставщик компилятора также не повлияют на вашу игру и не повлияют на частоту кадров или удобство использования. Вы должны прочитать об оптимизации нижнего уровня для архитектуры ARM. Несколько статей о NEON и instruments принесет вам гораздо больше пользы, чем изучение «оптимизации для компилятора».
fsel()
PPC, который позволял функции отказываться от ветвления с возвратами с плавающей запятой. Компилятор не знал, как сворачивать ветки в fsel, вы должны были сказать ему об этом. Кроме того, он спросил о компиляторах, а не об отладчиках, поэтому я счел обсуждение LLDB неуместным.
- person CodaFi; 19.08.2012
Еще одно отличие: Clang поддерживает большую часть C ++ 11. GCC 4.2-Apple не поддерживает C ++ 11.