О скорости и размерах кода
Выводы которые я сделал для себя:
- для кода,где преобладают конструкции типа if-else и
присваивания,ВСЕ проверяемые компиляторы генерят
практически одинаковый код(ARM RVDT чуть лучше,
GCC-чуть хуже) и скорость исполнения практически
таже самая
- на повышенных уровнях оптимизации для всех
компиляторов поведение различно.Опуская причины,
я думаю,что для всего проекта применение
повышенных уровней оптимизации нецелесообразно -
(все компиляторы на высоких уровнях оптимизации
ведут себя непредсказуемо -> после каждого даже
небольшого изменения проекта нужно проводить
заново ПОЛНОЕ тестирование,a это не всегда возможно)
- качество кода,генерируемого современными ARM
компиляторами даже c уровнем оптимизации O1
очень высокое.
Пример: нужно загрузить 2 константы по двум разным
адресам памяти
Человек напишет код:
ldr r0, r3 ;-- 1я константа в r3
str r0,[r1]
ldr r0, r4 ;-- 2я константа в r4
str r0,[r2]
Компилятор создаст такой же код.
Но вот если константы одинаковые,то компилятор
знает это и создаст код на команду меньше:
ldr r0, r3 ;-- 1я константа(и 2я константа такая же)
str r0,[r1]
str r0,[r2]
Человек же в 99% случаев никогда не будет "закладываться"
на то,что константы окажутся одинаковые
- стандартные библиотеки GNU значительно уступают
стандартным библиотекам коммерческих компиляторов