- ベストアンサー
.NET C++の処理速度
最近.NETについて調べていました。 .NETではコンパイル時にマネージドコードと呼ばれる中間ファイルが作成され、 それが.NETFramework上で動くという仕組みのため、C++で書こうがVBで書こうが 最終的にできあがるものは同じものになるということが分かりました。 私は、Cが有利な点は(Javaなど他の言語に比べ)処理速度が異常に早いことだと思っていましたが .NET上で動く場合はC++もVBも処理速度に差が出ることはあまりないのでしょうか? また、.NET、JVM、ネイティブのCの3つを比較した場合、 どのくらい処理速度に差があるでしょうか?(大雑把でもいいので) 私は [ネイティブC] >>>超えられない壁>>> [.NET] > [JVM] くらいかと思っているのですが‥ 以上、よろしくお願いします。
- kyonn2008
- お礼率46% (31/66)
- C・C++・C#
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
古い情報なので、最新版とは違うと思いますが・・ 2002年に.NETが出てすぐ、業務での使用を検討するため比較しました。 #今は.NETがもっと洗練されているはず・・・ 【円周率 20000桁計算 マーチンの式を使用】 ・VC6(Native) debug:91秒 Release:33秒 ・VC.NET(CLR) debug:81秒 Release:78秒 当時のCPUなので絶対値は意味ないですが、繰り返しが多い処理では .NETが予想外に善戦しました。 ただ、これは、繰り返しでの計算のみのなので、表示や他の処理を行なう 場合には、まったく異なる結果になる可能性も大です。
その他の回答 (2)
- BLK314
- ベストアンサー率55% (84/152)
これは一概には言えないと思います。 と言いますのは、 最近は"オプティマイザー"が大変賢くなってきているからです。 まず、前提ですが .NETはインタープリターではありません。 これは (過去の私も含めて)非常に誤解の多い所です。 毎回のようにネイティブ変換しながら実行していたのでは とても非効率です。それこそ、ネィティブCとは比較するのも 恥ずかしいほど遅いでしょう。 実際には、プログラムがロードされた時点で ネィティブに変換されます。 ですから、ロードの時間は大変長くなりますが、 一旦ロードされれば、ネィティブの速度が期待できます。 また、インストール時に変換させることもできます。 こうすれば、実行時は完全にネィティブの速度が出ます。 冒頭に述べていたオプティマイザの影響について述べます。 通常のC/C++はできるだけバイナリ互換を広くとろうとビルドします。 別の見方をすれば、 実行環境に関する仮定をできるだけ少なくする ともいえます。 つまり、Pentium4用にビルドした場合は 実際に走るCPUがCore2であっても、 単なる高速なPen4にしかなりません。 CPUキャッシュなどを仮定した最適化などは (指示がない限り) 行わないのが普通です。 しかし、.NETのネィティブへの変換の際には 実行環境が完全に特定されています。 CPUに大容量のキャッシュがあれば、 ギリギリまでサイズを小さくし キャッシュに詰め込めるサイズに最適化しようとするでしょうし、 4バイト境界ではキャッシュに入らないが、 1バイト境界に詰めればキャッシュに収まるなら キャッシュに収まるよう配置するということも考えられます。 逆に、CPUキャッシュが小さすぎて どう工夫してもキャッシュに収まらないのであれば、 素直に4ビット境界に配置し メモリアクセスの高速化を図ることもあると思います。 このような最適化は、一般のC/C++ではできません。 (プログラマが明示的に指示すれば可能です) 実行環境に対し完全に最適化された、.NETと 中途半端に最適化されたC/C++ それでも ”越えられない壁" があるほど差が付くとは 断定できないと思います。
- SAYKA
- ベストアンサー率34% (944/2776)
??? Cで書かれた物ってさ 「ライブラリ」 を作ったりするでしょ? じゃぁさ、Frameworkって 「何で作られたライブラリ」だと思う? まぁ嫌なら.NETじゃないVCとかでやるしかないかも。 それでも油断してるとすぐFrameworkのライブラリを使おうとしやがるけど。
関連するQ&A
- .NET言語のクラスはどの言語でも互換性がある?
表題のような話を聞いた事があるのですが、真偽はどうなのでしょうか? 例えばC++.NETでDLLを作成し、それをC#.NETの開発で利用可能などと。 .NETFrameworkが仲介する事で言語の依存性を無くすらしいのですが、 そういった利用は可能なのでしょうか? また、利用出来る場合、以下のはどうなのでしょうか? ・利用出来ない場合というのも存在するか? ・.NETFrameworkを利用していない言語(例えばC++、 C++.NETのネイティブコンパイル、VBなど)でも 利用する事は可能?
- ベストアンサー
- C・C++・C#
- CとJavaはどのくらいスピードが違うの?
BorlandのJBuilderなど、Javaもネイティブコードコンパイラがありますよね。質問ですが、 (1) UNIXで動くJavaのネイティブコードコンパイラで優秀なものはあるのでしょうか。 (2) C言語でコンパイルしたプログラムとJavaでネイティブコードコンパイルしたプログラムは、どのくらい速度に差があるのでしょうか? たとえば、Visual Basicも最近のバージョンはネイティブコードコンパイルができますが、C言語で作った同じ論理構造のプログラムに比べて、やはり、かなり実行速度が劣ります。
- 締切済み
- Java
- managed-C 使ってますか?
唐突な質問で恐縮です。 私、制御系or技術計算系ソフトウェアをC/C++で開発しているものですが、.NET環境での開発にmanaged-C の利用が必要ということで、二の足を踏んでいます。 その理由としては、 1、計算速度が非常に重要なので、中間コードベースの.NETは遅い(?推測?) 2、unmanaged-C クラスをmanaged-C クラスに書き換えるのはすごく手間かかりそう 3、.NETの中でどんな処理されているのか見えにくいので、メンテがたいへんそう。 そこで、皆様の意見を伺いたいのですが、 managed-Cで開発されている方いらっしゃいましたら、どんなところがmanaged-C開発のメリットでしょうか? なんでもかまいませんので、お教えください。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- VB ネイティブコンパイルについて
(1)VB6、VB2005で書かれたソースコードについて、ネイティブ・コンパイル(完全コンパイル)は可能でしょうか? (2)VB6のネイティブコードコンパイルを行うとPコードコンパイルに比べて数十倍早くなったという話を聞いたことがあります。 コーディングによってはそれほど違いが出るものなのでしょうか? また、どのような処理で特に差が現れるのでしょうか? (3)Windows98以降は初めからVB6ランタイムが組み込まれていると聞きます。 実際には、アプリの動作しますが画面上で文字化けを起こしてしまうようです。 これれは組み込まれているVB6ランタイムのバージョンが古いことが原因で起きるのでしょうか? よろしくお願い致します。
- ベストアンサー
- Visual Basic
- VB.NETとC#の違い
JOBで使用する開発言語をVB.NETにするかC#にするかで迷っています。 画面アプリと裏タスクという構成ですが、 今までは画面=VB、裏タスク=Cという固定概念でしたが、このままでよいのか疑問です。 下記は私なりに調べてみた比較なのですが、 ●従来Cの短所とされてきたこと ・画面設計のし易さ C#はVBと同じようにVisualStudio上で簡単に設計できる。イベントドリブンも可能。 ・言語のとっつき易さ C#でASPを組んだ経験もありますので大して抵抗はありません。 しかも、VB6.0→VB.NETの移行は従来のVB5.0→6.0へ移行ほど安易ではない。 ●従来Cの長所とされてきたこと ・処理速度 VB.NETと差が無いような記事も見たことがあります。 こう考えるとC#とVBの差が、どんどん縮んできており、長所短所を見出すことができません。 いったい違いって何でしょうか、ご存知の方、ご教示いただきたくお願いいたします。
- 締切済み
- その他(ソフトウェア)
- C#とVC++.NETとVB.NET
C#とVC++.NETとVB.NETは同じ.NETFrameWorkライブラリを使用するようですが、どれも同じ機能が使える(制御できる制限に差が無い)と考えてよろしいでしょうか?もしそうであればVS6のMFCでできるものはC#でも可能ということになると思います。また、Win32で最大限のパフォーマンスを引き出すやり方は変わってはいませんでしょうか?(やはりWin32のメンテナンスしにくいコードをいじるしかない?) VS6だとVB6<MFC<Win32という難易度、制御できる数、メンテナンスというイメージがあったのですが・・・。 ご存知の方、宜しくお願いします。
- ベストアンサー
- C・C++・C#
- C#で携帯アプリ開発
Xamarinを使用するとC#で開発できることを知りました。 まだ、やりたいことができるか模索している段階なので、仕組みが全く分からないため、以下2点を質問します。 1つ目 IOSとAndoroidではUIが違うため、使うコンポーネント?フレームワーク?が違うみたいですが、実装部分は全く同じコードで作ることができますか? 2つ目 IOSもAndoroidも.netFrameWorkはないですが、FrameWorkや.net用に作られたdllを使用して作成できるものでしょうか? 使用できる場合、コンパイル時に機械語に近い形でコンパイルされるのでしょうか? IOSはObjective-Cやswift、Andoroidはjavaのイメージがありますが、コンパイルされるとそのコードに変換されるのでしょうか? モバイルアプリに関して全く知識がないため、ご存知の方いましたら教えてください。
- ベストアンサー
- スマートフォンアプリ開発
- 素朴な疑問 (C言語とアセンブラの処理速度の違いについて)
C言語で作成したプログラムをビルドして実行ファイルを作成するのと、アセンブラ言語(?)をアセンブルして作成した実行ファイルは、どうして処理速度が違うのでしょうか?例えば全く同じ処理を高級言語と低級言語で作成した場合、出来上がったそれぞれの実行ファイルの違いは、コンパイル時に吸収されてしまうわけではないのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- callocの処理速度
Visual C++.netを利用しています。 確保した領域の値を0に初期化したく、自分が思いつく下記の3つの方法を試し、timeGetTime関数を用いて処理の速度を計ってみました。 結果は、Aは処理速度が1ミリ秒だったのですがBは5ミリ秒、Cは3ミリ秒もかかってしまいました。 AとB、Cに時間差が表れてしまうのはなぜなのでしょうか?また、もっと速くできる方法があるのならば教えてください。 それと、new演算子には、callocのような0で初期化されるといった機能はないのでしょうか? よろしくお願いします。 int a[100000] = {0};--------A int *a = (int*)calloc(i*sizeof(100000));------B int *a = (int*)malloc(i*sizeof(100000));------C forループで0を代入
- ベストアンサー
- C・C++・C#
- javaとC#のStringの違い
javaだと、Equals()を使わないとStringの比較ができないのですが、C#だとEquals()も==も使えます。 これはなぜでしょうか? C#では、Stringも基本データ型なのでしょうか?それとも中間言語にコンパイルされる際に==をEquals()に変換されているのでしょうか?
- ベストアンサー
- Java