Добавление Datapoint (или, по крайней мере, анекдот):
Мы недавно были писать математическую библиотеку для небольшого встраиваемого типа цели, и начал писать его в C. Примерно на полпути через проект, мы перешли некоторые файлов на C++, в основном для использования шаблонов для некоторых функций, в которых мы в противном случае могли бы писать много почти идентичных фрагментов кода (или встраивать 40-строчные функции в макросы препроцессора).
В тот момент, когда мы начали переключение, мы очень внимательно посмотрели на сгенерированный код сборки (используя GCC) на ряд функций и подтвердили, что он фактически был по существу идентичным, был ли файл скомпилирован как C или C++ - где «по существу идентичны» я имею в виду различия в таких вещах, как имена символов и материал в начале и конце файла сборки; фактические инструкции в середине функций были точно идентичны.
Извините, что у меня нет более надежного ответа.
Редактировать добавить, 2013-03-24: Недавно я наткнулся на статью, где Расти Рассел по сравнению производительности на GCC компилируется с компилятором и скомпилирован с C++ компилятор, в ответ на недавний переключатель для компиляции GCC как C++: http://rusty.ozlabs.org/?p=330. Выводы интересны: версия, скомпилированная с помощью компилятора C++, была немного медленнее; разница составляла около 0,3%. Однако это было полностью объяснено различиями во времени загрузки, вызванными большей информацией об отладке; когда он разделил двоичные файлы и удалил информацию об отладке, различия составляли менее 0,1%, то есть практически неотличимы от шума измерения.
Сравнение различных компиляторов? Сравнение компиляции C с компиляцией C++ одним и тем же компилятором? (будет ли разница?) А что такое флаги «встроенного стиля»? –
К тому же комплексу компилятора (т. Е. Gcc vs. g ++). Из-за различий в спецификации полезная оптимизация может быть более или менее применима в промежуточном представлении одного языка по сравнению с другим (или некоторые оптимизации могут быть включены для одного языка, который не включен для другого). Я упомянул два встроенных флага стиля - те, которые запрещают поддержку исключений, и те, которые отключают RTTI. – cdleary
Если вы скомпилируете C-подобный код, я не вижу, как любой из этих флагов применим в любом случае - если у вас есть только POD, в любом месте нет деструкторов и, следовательно, нет необходимости в коде обработки исключений. Поскольку нет виртуальных функций, RTTI не требуется, за исключением вызовов 'typeid', разрешенных во время компиляции, и если их нет, тогда нет никакой необходимости. –