C / C ++ может работать значительно лучше в программах, где имеются либо большие массивы, либо тяжелые циклы / итерации по массивам (любого размера). Это причина того, что графика обычно намного быстрее в C / C ++, потому что тяжелые операции с массивами лежат в основе почти всех графических операций. .NET известен своей медлительностью в операциях индексации массивов из-за всех проверок безопасности, и это особенно верно для многомерных массивов (и, да, прямоугольные массивы C # даже медленнее, чем зубчатые массивы C #).
Бонусы C / C ++ наиболее заметны, если вы будете придерживаться указателей и избегать Boost, std::vector
и других высокоуровневых контейнеров, а также inline
для каждой маленькой возможной функции. По возможности используйте массивы старой школы. Да, вам потребуется больше строк кода, чтобы выполнить то же самое, что вы сделали в Java или C #, так как вы избегаете высокоуровневых контейнеров. Если вам нужен динамически изменяемый массив, вам просто нужно не забыть соединить ваш new T[]
с соответствующим оператором delete[]
(или использовать std::unique_ptr
) - цена за дополнительную скорость заключается в том, что вы должны кодировать более тщательно. Но в обмен на это вы избавляете себя от накладных расходов на управляемую память / сборщик мусора, которые могут легко составлять 20% или более времени выполнения сильно ориентированных на объект программ как на Java, так и на .NET, а также массивных управляемых программ. затраты на индексацию массива памяти. Приложения C ++ также могут извлечь выгоду из некоторых изящных переключателей компилятора в определенных конкретных случаях.
Я опытный программист на C, C ++, Java и C #. Недавно у меня был редкий случай реализовать точно такую же алгоритмическую программу на последних 3 языках. В программе было много математических и многомерных операций с массивами. Я сильно оптимизировал это на всех 3 языках. Результаты были типичными для того, что я обычно вижу в менее строгих сравнениях: Java была примерно в 1,3 раза быстрее, чем C # (большинство JVM более оптимизированы, чем CLR), а версия необработанного указателя на C ++ оказалась примерно в 2,1 раза быстрее, чем C # . Обратите внимание, что программа на C # использовала только безопасный код & mdash; по моему мнению, вы можете также кодировать его на C ++ перед использованием ключевого слова unsafe
.
Чтобы никто не подумал, что я что-то имею против C #, я в заключение скажу, что C #, вероятно, мой любимый язык. Это самый логичный, интуитивно понятный и быстрый язык разработки, с которым я когда-либо сталкивался. Я делаю все свои прототипы в C #. Язык C # имеет много небольших, тонких преимуществ перед Java (да, я знаю, что у Microsoft была возможность исправить многие недостатки Java, войдя в игру с опозданием и, возможно, скопировав Java). Тост за класс Java Calendar
кто-нибудь? Если Microsoft когда-либо приложит реальные усилия для оптимизации CLR и .NET JITter, C # может серьезно вступить во владение. Я, честно говоря, удивлен, что они еще не сделали & mdash; они так много сделали прямо на языке C #, почему бы не сделать это с помощью мощных оптимизаций компилятора? Может быть, если мы все умоляем.