2009-03-01 4 views
10

Я замечаю, что на той же машине требуется C# гораздо меньше времени, чем C++ для компиляции. Зачем?Почему C# компилируется намного быстрее, чем C++?

ПРИМЕЧАНИЕ 1. Я не делал научных исследований.

ПРИМЕЧАНИЕ 2. Перед тем, как кто-нибудь скажет, что это не связано с программированием, я реализую парсер, я нахожу, что могу сделать, начиная с увеличения скорости компиляции.

ПРИМЕЧАНИЕ 3. У меня есть аналогичный вопрос Why do compilations take so long?. Этот вопрос задает конкретную разницу от C/C++ до C#. Очевидно, что простой язык будет быстрее компилироваться, чем сложный язык, но C и C# - это сложные языки.

мой вынос: 1) C/C++ является медленным от препроцессора и заголовков. 2) много заголовков заставляет анализировать намного больше данных. особенно, когда каждый файл может использовать препроцессор может изменить код 3) C# отложить некоторую компиляцию программы запуска 4) инструкции IL просты, машина не

+0

Мне нужно знать, прочитали ли вы ответы на свой предыдущий вопрос на эту тему: http://stackoverflow.com/questions/588884/why-do-compilations-take-so-long –

+0

да у меня есть. Этот вопрос фокусируется на конкретном отличии от c до C# – 2009-03-01 22:26:02

+0

, которые вызываются специально в этом ответе ... это то, что делает C++, что делает разницу, ничего особенного, что C# делает – ShuggyCoUk

ответ

2

Поскольку C++ компилируется машинный код, а C# - в байтовый код. Вы заметили лаг, когда вы впервые запустили свою программу .NET. Это когда байтовый код получает JITed (скомпилирован в машинный код).

+0

Есть еще много вопросов, кроме этого. –

+1

Delphi также компилируется в машинный код, и он быстрее, чем C#, а это не так. – Arafangion

+1

главной проблемой является источник, а не цель. – peterchen

0

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

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

Итак, если вы сравниваете их для написания парсера ... узнать, что вы не должны иметь .h стиле включают файлы :)

5

Есть два отдельных вопроса, чтобы рассмотреть - число фаз обработки и сложности таргетинга.

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

Кроме того, имейте в виду, что компилятор C++ будет ориентироваться на машинный язык x86 или x64 - обработка всей оптимизации спереди и попытка наилучшего использования аппаратного обеспечения, которое на самом деле не оптимизировано при разработке стиля OO.

Напротив, компилятор C# ориентирован на Microsoft Intermediate Language (MSIL), платформу с более высоким уровнем машинного кода, предназначенную для разработки OO. Многие из конструкций, предоставляемых C#, отображаются непосредственно в инструкциях IL, что делает компиляцию очень простой. Справедливая часть оптимизации и другой деятельности откладывается до запуска фактической программы, и в этот момент она оптимизирована для точной доступной машины.

Смежные вопросы