2009-08-19 4 views
-1

私はC++のテンプレートメタプログラムにCプログラムを移植しました。今はランタイムを比較したいと思います。 C++プログラムにはほとんど実行時がないので、これらの2つのプログラムをどのように比較すればよいですか。
私はCランタイムとC++コンパイル時間を比較できますか?それともそれは匹敵しないのでしょうか?C++メタプログラムとCコードをどのように比較すればよいですか? (ランタイム)

+2

あなたの質問は意味をなさない。行って、少し考えてから、言い換えられた質問に戻ってください。まず、「ランタイム」とはどういう意味ですか? –

+0

なぜ実行時(実行時のパフォーマンス)とコンパイル時を比較する必要がありますか? – Max

+0

@マックス:はい。私は実行性能を意味しましたか? @Neil:私は母国語ではありません。実行時には、プログラムを実行する時間/特別な方法を意味します。 – n00ki3

答えて

5

あなたは比較したいものを比較することができます。比較すべきものについて真のルールはありません。

各バージョンの実行に要する時間を比較するか、それぞれのバージョンをコンパイルするのに時間を比較できます。

または、プログラムの長さ、またはソースファイルの 'r'文字の数を比較できます。 各ファイルのタイムスタンプを比較できます。

2つのプログラムを比較する方法は、表示する内容によって異なります。

実行速度が他のものよりも速いことを確認したい場合は、実行する時間を両方とも実行し、とそれらのの数値を比較してください。

コンパイル時に他のコンパイルより速くコンパイルすることを確認したい場合は、コンパイルに時間をかけてください。

C++プログラムのコンパイル時とCプログラムの実行時の関係が適切だと思う場合は、それらを比較してください。

表示する内容を決定します。次に、あなたは何を比較するかを知るでしょう。

2

私が正しく理解していれば、Cプログラムは完全にテンプレートベースのものに書き直されていますか?結果として、Cプログラムを実行するのにかかる時間と、ほとんど時間がかからず、単に結果を書き出すC++プログラムとを比較しています。

この場合、私は非常に匹敵するとは思っていません。エンドユーザーはCプログラムの実行にx秒かかり、C++のものはすぐに完了します。しかし、開発者はCプログラムがx秒でコンパイルされ、C++コンパイルがより多くの秒でコンパイルされるのを見るでしょう。

Cのコンパイル時間とCの実行時間を比較することができます。アプリが結果を生成して2回実行しないように設計されている場合は、このように時間を比較できます。プログラムが複数回実行されるように設計されている場合、実行時間は比較する必要があります。

は、私はちょうどあなたががあなたのC++テンプレートコード:)

PSに多くのコメントを入れたいと考えています。私は興味があります - 両方のコンパイル時間と比較して、Cの実行時間はどれくらいですか?

2

なぜなら、C++プログラムは常に同じ結果を生成するからです。プログラムのいずれかを使用して、一度結果を計算し、その後で両方を置き換える:

int main() 
{ 
    printf("<insert correct output here>\n"); 
    return 0; 
} 
-2

今日のCおよびC++コンパイラは、したがって、最も可能性の高い同じアセンブリコードを生成し、同じバックエンドを共有しています。

C++ちょうどより多くの注釈付きCで、あなたはまだCplusplusingながら良いCを行うことができます;)

CだけC++兄です。あなたのCプログラムは、それが精度のいくつかの特定の程度にコサイン数を計算言うことができますない何を言っていない

+1

あなたは答える前に質問を読むことをお勧めします。 – sbi

+0

私は彼がそれを読もうとしたが、私たちの残りの人のように混乱したと思う。 –

-1

これは、私はあなたがやろうとしていると思うものです。このプログラムをC++のテンプレートベースの同等のものに変換しました。これは同じことをしますが、コンパイル時にコンパイル時の定数値を生成します。これは、「ハードコーディングされた」コサイン値を使用するアルゴリズムがあり、ランダムに見える数のテーブルを持たない方が好きな場合は、妥当なことです。このための実際の使用の例については、this articleを参照してください(または、BlitzやTodd Veldhuizenを検索してください)。

したがって、C++正弦計算機のコンパイル時のパフォーマンスと元のCバージョンの実行時の性能を比較したいとします。

Cバージョンを実行する時間とC++ソースファイルをコンパイルする時間を直接比較すると、コンパイル時間が大幅に遅くなることがわかります。コンパイラがテンプレートコードを単に実行するだけではないので、これは公正な比較ではありません。

EDIT:あなたがテンプレートコードが生成されますどのようにいくつかの簡単なコード相当していて、C++プログラムのコピーを作成することにより、コンパイラのオーバーヘッドを補うことができ - それは理にかなっている場合は、あなたのテンプレートコードをコンパイル手に持っている、すなわち、 。そのソースのコンパイルに時間をかけると、元のC++テンプレートプログラムをコンパイルする時間と時間の差は、恐らくテンプレートを実行するのに必要な時間に過ぎません。

+0

実行中以外のコンパイラは何をしていますか? – n00ki3

+0

コンパイル:-)ソースファイルを読み込み、前処理し、解析し、マシンコードを生成し、オブジェクトファイルを書き出します。あなたはそれを補うことができると思います - 上記の私のリプレイを編集させてください。 –

0

2つのプログラムのコンパイル時間を比較してランタイムを比較し、追加のコンパイル時間を償却した回数を計算することができます。

関連する問題