RobinF wrote:Аналогичного отимизатора у Java/C# просто не может быть.
Не полностью аналогичный, естессно, но сравнимый по производительности есть. C++/CLR тоже .NET, MSVC в молодости сначала генерил intermediate language ака PCode, который уже на финальном этапе превращался в машинный код.
У C# оптимизатор пока что довольно чахлый в сравнении с C++, именно на этапе преобразования source code->CLI, это да, и очень заметно сравнивая C++/CLR vs C#.
Перепишите это на Java или C# с использованием ArrayList... Код и цифры в студию.
Код и цифры выше по тексту. Как показали оные цифры, беглое изучение матчасти и соответствующих managed библиотек дает ускорение программы на C# приблизительно в 2000 раз
Естессно не надо сравнивать ArrayList и std::vector, а вот C#-овский List<T> и std::vector выдадут близкий результат если Edge - это struct. Ну и в конце концов на C# только лень и отсутствие надобности мешает провалиться до уровня C, и написать собственный malloc, разделяющий память, и жить в мире указателей.
Тест №2...
class -> struct, и никаких трех миллионов аллокаций не будет. На Java все это, вероятно, не так т.к. язык попроще. Ну дык она и постарше.
Было бы, короче говоря, желание, а сделать производительность managed кода сравнимой с native вполно можно, особенно в случае C#/.NET.
Но для этого знать надо, часто, не меньше или больше чем для написания того же на языке уровнем пониже. И хотя бы приблизительно представлять что происходит внутри от каждой вызываемой высокоуровневой конструкции. Причем на любом языке, от SQL до C++.