2

私はプログラマーではありませんが、最近コーディングに興味を持ち、自分で C を学び始め、ProjectEuler.net からの質問をそれで解決し始めました。

私が書いている各ソースコードの最後に、次の 2 行を追加しています。

printf ( "The number you are looking for is %d", 0 );
printf ( "\n... and took %d / %d seconds to compute that", clock(), CLOCKS_PER_SEC );

...ここで、ゼロを答えとして必要な数字に置き換えます。

問題は次のとおりです。作業をどれだけ最適化しても、printf は 50 未満のクロックを表示することはありません。これら 2 つの操作以外の操作を行わずに完全に空白のソース コードを使用した場合でも、50 クロックを表示します。これらの 50 クロックを費やしているのは #include の上部にあるのでしょうか、それとも別のものでしょうか?

私のソース コードの中には、50 個のクロックを表示するものもあります。だから...ここで何を推測すればよいかわかりません。私が書いたもののいくつかは、解決するのに本当に0ミリ秒かかりますか?

4

2 に答える 2

5

システムクロックは、継続的に実行されるのではなく、頻繁に (おそらく 50 ミリ秒ごとに) 「刻み」ます。したがって、clock()関数は、プロセスが開始してから消費したこれらの「ティック」の数を測定します。この方法は、1 ティックよりも短い期間の測定にはあまり適していません。

さらに精度が必要な場合は、高解像度のタイマーを使用する必要があります。

于 2013-08-31T21:44:41.853 に答える
0

さて、私は自分の問題を自分で解決しました。最近、Sublime Text を使用してソース C コードを記述することに切り替え、Visual Studio 2012 の cl.exe ツールを使用する .c ファイルから .exe をコンパイルするバッチ ファイルを作成しました。

これにより、Visual Studio 2012 でローカル Windows デバッガーの代わりに実際の .exe を使用するようになりました。

そして、+50 クロックはLocal Windows Debuggerでのみ発生することに気付きました。先ほど書いたコードが表示されます。- Sublime Text + batchCompiler で生成した .exe を起動すると 0 ~ 1 クロック - Visual Studio 2012がローカル Windows デバッガー%ProjectDirectory%\Debug\を使用するたびに生成した .exe を起動すると 0 ~ 1 クロック - しかし 50 ~ 51 Visual Studio 2012 のローカル Windows デバッガーを表示したときのクロック

だから...ええ、それはVisual Studio 2012の支援された実行についてです

于 2013-09-17T21:46:47.613 に答える