Подтвердить что ты не робот

Является ли C более быстрым, чем С++

Насколько я понимаю, все языки сценариев и основные научные программы обычно пишутся на языке C; это делает реализацию грязной, но прямолинейной.

Я понимаю, что эти люди хотели бы максимизировать их производительность, но есть реальная разница между использованием строк C и структур C для использования классов С++; С++, похоже, работает одинаково, кроме виртуальных функций, он сохраняет функцию класса один раз, и каждый экземпляр этого класса вызывает эту функцию.

Что делает C быстрее и является ли это заметной разницей в проекте, таком как python или sqlite, которые должны быть самыми быстрыми?

4b9b3361

Ответ 1

С++ часто используется для научных программ. Популярность C может ослабевать в этой области. Fortran остается популярным как "низкоуровневый" язык.

В С++ "вы платите только за то, что используете". Таким образом, нет ничего, что могло бы сделать его медленнее C. В частности, для научных программ шаблоны выражений позволяют выполнять некоторую выборочную оптимизацию с использованием механизма шаблонов для обработки семантики программы.

Причина C для проектов, таких как Python, заключается в том, что многие люди понимают это (относительно) полностью, поэтому большая база кода не будет путать многие из большого количества участников.

SQLite имеет требование для небольшого размера исполняемого кода, где C имеет небольшое ребро. Разумное использование С++ по-прежнему позволяет использовать его во встроенных приложениях, но оно менее популярно из-за опасений, что в него войдут нежелательные языковые функции.

Ответ 2

Я не думаю, что причина так связана с производительностью, как с интероперабельностью. Язык С++ более сложный, чем язык C, но с точки зрения производительности не должно быть заметной разницы в любом случае. Некоторые С++-конструкции быстрее, чем C-эквивалент (std::sort быстрее, чем qsort), и, вероятно, есть хорошие примеры по-другому.

EDIT: на стороне совместимости...

В принципе, стандарт С++ не определяет некоторые вещи, которые могут потребоваться для обеспечения простой совместимости между исполняемыми файлами, созданными с различными компиляторами/версиями. Наиболее заметной проблемой здесь будет соглашение об именах для символов в двоичном формате. В языке C язык определяет одно отображение из каждого символа в коде в двоичное имя символа. Функция, называемая my_function, создаст символ в двоичном формате с именем my_function. С другой стороны, из-за таких функций, как перегрузка функций, имена функций С++ должны быть искажены (переведены на разные функциональные символы в двоичном формате, кодируются типы аргументов и типы возвращаемых данных), а стандарт не определяет, как выполняется манипуляция. Это, в свою очередь, означает, что одна и та же функция в С++ может быть скомпилирована для разных символов в зависимости от компилятора (если только extern "C" не используется для обеспечения совместимости C для этих функций на С++).

В конце концов, интерфейс между языком сценариев и собственным кодом должен быть C-интерфейсом в любом случае, даже если детали того, как он реализован внутри, может быть C/С++/любым другим родным языком.

(Я намеренно не желаю вступать в пламенную войну языковых преференций, С++ действительно мощный, но это также немного страшно, так как это гораздо более сложный язык, чем C, а некоторые вещи, которые выглядят просто, могут иметь влияние на производительность)

Ответ 3

Языки не являются по своей природе более быстрыми или медленными, интерпретаторы и компиляторы могут быть более или менее эффективными.

Кроме того, языки более высокого уровня обеспечивают уровни абстракции, которые обычно имеют стоимость исполнения. Если вы их не используете, компилятор может быть достаточно умным, чтобы их исключить, но это может быть невозможно, если семантика языка не позволяет сделать это безопасно... И если вам это нужно, на языке более низкого уровня, вероятно, будет медленнее, чем использование "медленного" языка.

Ответ 4

Как упоминает Бьярне в [D & E], эффективность является одной из основных целей С++. Таким образом, С++ работает медленнее только тогда, когда программист использует свои "дополнительные" функции, такие как упомянутые вами виртуальные функции, информацию rtt и т.д.

Итак, я думаю, что это больше из психологических причин - C используется, поскольку он не позволяет "медленные" возможности С++.