#c #linux #macos #c 11
#c #linux #macos #c 11
Вопрос:
Я работаю над кроссплатформенным проектом с использованием C 11, Boost, Qt и некоторых небольших библиотек.
Тестируя сборку на Mac OSX, я понял, что clang занимает всего около 66% времени по сравнению с clang в Linux Mint 17 на той же машине. Отладочная сборка на основе Qmake (-j8) с теми же настройками.
Версии лишь немного отличаются:
- Clang: 3.4
- Повышение: 1.55.0
- Qt: 5.3 против 5.2.1
Переход на libc в Linux также не имел никакого значения.
Откуда такая огромная разница во времени компиляции?
Могу ли я достичь такой же скорости в Linux?
Комментарии:
1. Как был скомпилирован сам clang?
2. Я использовал тот, который был отправлен с помощью XCode на Mac, и тот, который был получен из репозиториев в Linux, так что с моей стороны ничего особенного. Я бы предположил, что они отправляют оптимизированные версии?
3. Вы измеряете прогоны qmake или прогоны clang? Как вы измеряете?
4. Просто общее время, так что
time make -j8
Ответ №1:
В OS X Clang всегда встроен 64-разрядный AMD64, но может быть 32-разрядным x86 в зависимости от вашей сборки Mint. 64-разрядная версия по сравнению с 32-разрядной может определенно повлиять на производительность компилятора.
Комментарии:
1. В Linux Mint я получаю get для
clang --version
:Target: x86_64-pc-linux-gnu
2. @MikeM Используется
file /path/to/clang
для просмотра архитектуры, в которой он построен, а не цели, которую он создает.3. @MikeM Вы также можете попробовать удалить -j8 из make, чтобы устранить возможные различия в отправке процессов между операционными системами.
4. @trojanfoe Извините, я не видел цель… это
/usr/bin/clang
. @eightycc Есть ли другая возможность параллельной компиляции, если я удаляюсь-j8
?5. @MikeM Я думаю, что это именно цель: не компилировать параллельно. Это устраняет возможные различия в расписании ОС, как сказал eightycc. Но есть много других возможных причин, связанных с ОС (например, управление памятью, если ваш код достаточно большой, чтобы требовать много памяти). Если вам не очень повезет, я бы подумал, что будет очень сложно определить точную причину.