C++とC#の速度差

C++C#の速度差について調べてみた
自分で実験して調査するのはめんどいので、ネット上から情報を拾ってきた


MicroSoftC#で演算速度を早くする方法,Visual Studio フォーラム
http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/307450c2-bdfe-497e-b93d-e4b8b9f71d49


上の①内の記述によると
>アンマネージコードだとCPUが直接理解できるネイティブコードに置き換えられるのに対し、
>マネージコードだと間にワンクッション置くので、(最適化も含め)どうしても速度的には
>C++の方が動作速度は速くなります。
ということらしい。アンマネージコードは使わない方がいいのかしら
PMD2Unityのアレで多用してるんだけど…マズイのかしら?


もうちょい新しいレスを読んでみると、良い情報があった
> 一方、C# は、ジャズ配列を意味します。
>これだと、要素へのアクセスはいつも間接参照になってしまいます。
>C# では、C の にあたる多次元配列は [,] のように記述します。
へー!
ここで言うジャズ配列っていうのは多分ジャグ配列のことかな?
ジャグ配列は「配列の配列」で、各配列のアドレスを要素としてもってるっぽい
だからジャグ配列を参照すると間接参照になる
MicroSoft:ジャグ配列 (C# プログラミング ガイド),MSDN ライブラリ
http://msdn.microsoft.com/ja-jp/library/2s05feca%28v=vs.80%29.aspx


あと、K. Takaoka氏のレスがしっくりきた
>.NET では仮想環境で動作するようなものではないため、

>C++C#で演算速度に差がでるということは、基本的に考えられない

>演算以外の部分を C++ の処理にあわせれば C# のコードでも同等の速度が出せるようになるはず

>C# で配列の境界チェックを取り除くには、すでに他の方も書かれていますが

>fixed 構文を使うような方法がありますし、配列オブジェクトが階層化されているようならば、

>データの持ち方を修正する必要があります。


マジ勉強になる