Здравствуйте, Videoman, Вы писали:
V>А если убрать throw из метода Parse и сделать метод inline, скорость у С++ вырастает ?
Такой вариант уже был:
http://rsdn.org/forum/cpp/8306833.1Автор: rg45
Дата: 02.07.22
. Ускорение, конечно, есть, но в C# аналогичная мера приводит к еще большему ускорению. В итоге разрыв увеличивается и получается 600 мс (C#) против 750 мс (C++). Использование inline и __forceinline никакого эффекта не дает, потому что функция инлайнится и без этого. Если встроить цикл парсинга в основной цикл прохода по входной последовательности, результат остается таким же.
V>Я c C# дела не имел. Я не пойму, нельзя сравнить assembler С# на выходе с выхлопом С++ ?
У C# выхлоп не непосредственно в машинные коды, а в промежуточный платформенно-независимый код intermediate language (IL). Во время запуска выполняется докомпиляция IL в машинные коды той платформы, на которой запускается приложение — так называемая процедура just-in-time compilation (JIT) или джиттинг. Джиттинг обеспечивается дотнетовой средой Common Language Runtime (CLR). Таким образом, достигается двухфазная оптимизация. Не знаю даже, имеет ли смысл сравнивать IL с ассемблером.