Sunday 26 November 2017

How much faster is C++ than C#?

itemprop="text">

Or is it now the other way
around?



From what I've heard there are some
areas in which C# proves to be faster than C++, but I've never had the guts to test it
by myself.



Thought any of you could explain
these differences in detail or point me to the right place for information on
this.



Answer




There is no strict reason why a bytecode
based language like C# or Java that has a JIT cannot be as fast as C++ code. However C++
code used to be significantly faster for a long time, and also today still is in many
cases. This is mainly due to the more advanced JIT optimizations being complicated to
implement, and the really cool ones are only arriving just
now.




So C++ is faster, in many cases.
But this is only part of the answer. The cases where C++ is actually faster, are highly
optimized programs, where expert programmers thoroughly optimized the hell out of the
code. This is not only very time consuming (and thus expensive), but also commonly leads
to errors due to over-optimizations.



On the
other hand, code in interpreted languages gets faster in later versions of the runtime
(.NET CLR or Java VM), without you doing anything. And there are a lot of useful
optimizations JIT compilers can do that are simply impossible in languages with
pointers. Also, some argue that garbage collection should generally be as fast or faster
as manual memory management, and in many cases it is. You can generally implement and
achieve all of this in C++ or C, but it's going to be much more complicated and error
prone.



As Donald Knuth said, "premature
optimization is the root of all evil". If you really know for sure that your application
will mostly consist of very performance critical arithmetic, and that it will be the
bottleneck, and it's certainly going to be faster in C++, and you're sure that C++ won't
conflict with your other requirements, go for C++. In any other case, concentrate on
first implementing your application correctly in whatever language suits you best, then
find performance bottlenecks if it runs too slow, and then think about how to optimize
the code. In the worst case, you might need to call out to C code through a foreign
function interface, so you'll still have the ability to write critical parts in lower
level language.



Keep in mind that
it's relatively easy to optimize a correct program, but much harder to correct an
optimized program.



Giving actual
percentages of speed advantages is impossible, it largely depends on your code. In many
cases, the programming language implementation isn't even the bottleneck. Take the
benchmarks at rel="noreferrer">http://benchmarksgame.alioth.debian.org/ with a great deal
of scepticism, as these largely test arithmetic code, which is most likely not similar
to your code at all.



No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...