1

私はさまざまな実験を行うC++プログラムを持っており、これらの実験中に、を使用していくつかの値をファイルに出力しますofstream。構造は基本的に次のとおりです。

 Start timer

 output to a file using ofstream (the output is, at most, a few words)

 do some experimental work

 Stop timer

少し広い質問ですが、ofstreamにかかる時間を無視できますか、それとも無視できるものではありませんか?または私はそれが依存すると思いますか?

4

3 に答える 3

4

まず、疑似コードから、ファイル出力の後にタイマーを開始することができます:-)しかし、実際のアプリではそうではないと思います。

それを超えて、それは明らかに「それ次第」の問題です。それほど多くの出力がなく、関心のあるコードが数分間実行される場合、出力は明らかに大きな違いはありません。一方、マイクロ秒単位で測定された実行時間をキャッチしようとしている場合は、おそらく ofstream を測定することになるでしょう。

スレッドで実際の出力を実行したり、以前に割り当てられた char 配列にメッセージを追加して最後に出力したりするなど、さまざまな魔法を試すことができます。ただし、すべてに実行時のペナルティが発生します。無料のものはありません。

実際の出力時間の測定には関心がないため、出力なしのバージョンをコンパイルして測定を行い、出力ありのバージョンをコンパイルしてコードをデバッグすることができます。EDIT:またはそれをランタイムオプションにします。無料のものはありませんが、「if (OutputEnabled)」は「無料」にかなり近いです:-)

于 2012-08-18T13:34:29.437 に答える
2

それは主に何をするかに依存ofstreamします...データを内部バッファに格納するだけで高速になりますが、バッファがいっぱいになり、実際にOS APIを呼び出して書き込みを実行すると、費やす時間がはるかに長くなる可能性があります。

ただし、明らかにすべては、データを内部バッファに書き込む場合とストリームがフラッシュされる場合の両方で、実行するIOと比較して「実験的作業」にかかる時間に依存します。コメントで示唆されているように、一方が他方とどのように比較されるかを確認するために、2つのことを個別に計時する必要があります。

于 2012-08-18T13:27:36.270 に答える
1

何かが他のものと比較して無視できるものです。あなたはあなたの質問で他に何も比較しません。

以下の私の声明の妥当性を確認するために、私はすでにここで質問をしました、そして結論は、それでも大まかなドラフト評価を与えるだけですが、そのような分類を維持するべきではないということでした(場合によっては間違っているかもしれません):

スタック操作は、ネット通信操作よりも10倍高速なI / O操作(たとえば、ハードドライブ上のファイルへの書き込み)よりも10倍高速なグラフィカルデバイス操作よりも10倍高速なヒープメモリ作成よりも10倍高速です。

これは大まかな見積もりにすぎません。コーディングするたびに、すべてを再評価する必要があります。

ofstreamへの書き込みで経過した時間がメカニズム全体に影響を与えない場合、それは無視できると見なすことができます。

それがプログラムメカニズム全体に影響を与える場合、それは無視できるとは見なされません。明らかに。

于 2012-08-18T13:33:30.897 に答える