Поэтому я хочу распространять приложение gcc с backtrace logging для критических ошибок. Тем не менее, это довольно критически важное приложение, поэтому я задаюсь вопросом, замедляют ли -g -rdynamic
gcc-флаги (особенно если они делают выделение)? Также хотел бы дать моим пользователям максимальную производительность, поэтому я компилирую флаги оптимизации, такие как "-flto"
и "-mtune"
, и это заставляет меня задаться вопросом, будут ли конфликты флагов, а внутри baacktrace будет безумие?Делают ли `-g -rdynamic` gcc-флаги замедление выполнения приложений (повышение производительности)?
Делают ли `-g -rdynamic` gcc-флаги замедление выполнения приложений (повышение производительности)?
ответ
Хотя ввод символов отладки не влияет на производительность сам по себе, ваше приложение по-прежнему сильно отстает с точки зрения возможной производительности. Я имею в виду, что было бы неплохо использовать -g
и -O3
одновременно, в общем. Поэтому, если ваше приложение имеет критическую производительность, но в то же время строго необходимо поддерживать хороший уровень отладки, тогда было бы разумно найти некоторый баланс между этими двумя. В последних версиях GCC нам предоставлен флаг -Og
:
Оптимизируйте опыт отладки.
-Og
включает оптимизацию, которая не мешает отладке. Это должен быть уровень оптимизации выбор для стандартного цикла редактирования-компиляции-отладки, предлагающий разумный уровень оптимизации при сохранении быстрой компиляции и хорошей отладочной работе.
Я думаю, что было бы хорошая идея, чтобы протестировать приложение с этим флагом, чтобы увидеть, является ли производительность на самом деле лучше, чем голые -g
, но отладка остается неповрежденной.
Еще раз не пренебрегайте чтением официальной документации GCC. LTO является относительно новой особенностью в GCC, и, как следствие, некоторые из его частей все еще экспериментальны и не предназначены для производства. Например, это прямой экстракт:
Оптимизация времени ссылки не работает с генерацией отладочной информации . Сочетание
-flto
с-g
в настоящее время является экспериментальным, и , как ожидается, приведет к неправильным результатам.
Не так давно у меня был смешанный опыт работы с LTO. Иногда это работает хорошо, иногда проект даже не компилируется, не говоря уже о том, что могут быть и тонкие проблемы времени исполнения. Суммируя все это, я бы не рекомендовал использовать LTO, особенно в вашей ситуации.
ПРИМЕЧАНИЕ: Производительность от LTO обычно варьируется от 0% до 3%, и это в значительной степени зависит от основного приложения. Без профилирования вы не можете сказать, разумно ли использовать LTO для вашей ситуации, поскольку это может принести больше проблем, чем преимуществ.
Флаги как -march
и -mtune
обычно делают оптимизацию на очень низком уровне - уровень команд для архитектуры целевого процессора. Таким образом, я бы не ожидал, что они будут вмешиваться в отладку. Тем не менее, вас приветствует, чтобы проверить это самостоятельно с вашим приложением.
Я не думаю, что это полностью отвечает на вопрос ОП. –
@R .: Цели OP: 1) обеспечить отличную производительность конечным пользователям; 2) вести разумную отладку; 3) узнайте о подводных камнях со смешением определенных флагов. Все это рассмотрено в моем ответе. –
Хорошо, О. П. принял его, поэтому, я думаю, я ошибаюсь, что это не полезно для ОП. Однако ничего в этом вопросе не было о вариантах отладки; OP просто хотел вернуться, и, конечно, нет причин пожертвовать «-O3» для этого. Лично я почти никогда не выключаю оптимизацию для целей отладки, но полезно ли это сделать, зависит от типа используемых инструментов отладки и типов ошибок, с которыми вы сталкиваетесь. –
-g
не имеет никакого влияния на производительность.-rdynamic
увеличит размер таблицы динамических символов в главном исполняемом файле, который может замедлить динамическое связывание. Лучше всего предположить, что замедление будет очень маленьким, но возможно измеримым (отличным от нуля) с точными инструментами измерения/профилирования.
- 1. Rails «студентов экзамен» приложений, повышение производительности
- 2. Будет ли многопоточность обеспечивать любое повышение производительности?
- 3. Повышение уровня оптимизации g ++
- 4. Использует ли COALESCE замедление производительности запроса
- 5. Повышение производительности 2D-графики
- 6. ISNULL: повышение производительности?
- 7. mysql как повышение производительности
- 8. WCF OData повышение производительности
- 9. Повышение производительности максимизации ожиданий
- 10. повышение производительности в android
- 11. Повышение производительности LINQ
- 12. Повышение производительности в коде
- 13. Замедление декомпиляции приложений Android?
- 14. Повышение производительности bufferedImage.drawImage
- 15. saveAsTextFile повышение производительности
- 16. Повышение производительности Java Regex
- 17. Повышение производительности Solr
- 18. SqlCommand.Cancel() вызывает повышение производительности?
- 19. повышение производительности запросов SQL
- 20. Повышение производительности SQLite
- 21. Повышение производительности WPF ObservableCollection
- 22. Повышение производительности Perl-кода
- 23. Отключает ли постоянство Redis повышение производительности?
- 24. Повышение производительности запроса
- 25. Повышение производительности NetBeets
- 26. Повышение производительности MySQL запросов
- 27. Повышение производительности для Mahout
- 28. Повышение производительности двойной - Java
- 29. Повышение производительности пакета SSIS
- 30. Повышение производительности запросов
С оптимизацией на вашем стеке не будет мусора, но из-за инкрустации и некоторых других оптимизаций, возможно, не получить все кадры стека без оптимизации. – arne
Если вы не можете сказать (когда у вас есть код и запускаете его на своей машине), что заставляет вас думать, что куча случайных людей в Интернете, не подозревающих, что ваш код будет знать? –
@SteveJessop: общая информация о gcc/опыт работы в Linux. – myWallJSON