Полезно ли использовать c++ для интенсивных вычислений, таких как миллионы циклов, миллионы элементов в массивах и т.д.?
Чтобы быть более конкретным, полезно ли использовать только функции C в программе c++ по соображениям производительности?
Будет ли это приложение работать медленнее, чем тот, который написан на C?
Как вы знаете, удобнее писать c++ (вам не нужно определять все, больше поддерживаемых библиотек, при необходимости вы можете использовать медленные, но функции сохранения работы).
Этот сайт: http://benchmarksgame.alioth.debian.org/u64q/c.php убежден, что C работает быстрее.
Использование C++ для высокопроизводительного кода - неплохая идея. Ваш основной подход к производительности должен выбирать эффективные структуры данных и алгоритмы, поддерживаемые хорошим инструментом профилирования производительности, чтобы находить неожиданные горячие точки и анализировать поведение вашего кода.
C действительно отлично подходит для очень требовательных вычислений. Тем не менее, я не уверен, что вы увидите большую разницу по сравнению с C++. Если у вас проблемы с производительностью, вы должны в основном сосредоточиться на поиске быстрых алгоритмов вместо попыток оптимизации на уровне низкого уровня. Компиляторы могут делать гораздо лучше, чем вы. В частности, для этой проблемы SPOJ наивный алгоритм истекает даже для хорошо написанного, высоко оптимизированного кода. "Умный" алгоритм (даже плохо написанный) по меньшей мере в 10 раз быстрее.
Кроме того, вы можете попытаться проверить, можно ли параллельно выполнять вычисления. Затем вы можете попробовать использовать GPGPU с:
В этих случаях C и C++ являются обязательными.
В общем, программа C++, написанная для производительности, будет по крайней мере такой же хорошей, как и аналогичная C-программа. Это может быть лучше, поскольку шаблоны облегчают повторное использование кода с большей оптимизацией времени компиляции (встраивание, удаление мертвого кода и т.д.), Чем C-эквиваленты, такие как qsort
и bsearch
. Библиотеки C++ предлагают такие вещи, как std::unordered_map
и std::sort
что упрощает работу программ C++ с использованием эффективных структур данных и алгоритмов, тогда как программы C чаще всего могут использовать массивы и алгоритмы грубой силы.
Если программа C++ использует библиотеки с более высокими накладными расходами или структурирована по-разному (например, используя OO и много виртуальной диспетчеризации), возможно, программа C++ может оказаться медленнее. Исторически сложилось так, что многие люди сообщили, что потоки ввода/вывода C++ значительно медленнее, чем альтернативы C-библиотеки, но они делают немного больше с точки зрения мест чести и поддерживают некоторое состояние, а современные реализации могут быть более быстрыми для некоторых операций.
Для операций с примитивными типами, циклов, вызовов функций и т.д., Не связанных с сложными библиотеками, обычно не будет разницы в производительности.
Ответ на этот вопрос имеет разные ответы. Рассмотрим следующие случаи.
-Loops не сильно зависит от языка программирования, он больше зависит от процессора. CPU имеет предсказание цикла, чтобы сделать цикл быстрее.
-If ваши классы использования, да, это будет медленнее из-за виртуальной отправки. Тем не менее, в области разработки программного обеспечения, компьютеры становятся быстрее, мы, программисты, не настолько абстракционируемся, это наш единственный инструмент для максимальной производительности кодирования.