ページ 1 / 1
実行時間差について
Posted: 2012年10月08日(月) 22:01
by みるく
C言語について学びはじめたばかりのものです。
質問にはいるのですが、
同じ仕事をする関数(たとえばprintfとputs)
でも、なぜ、実行時間差が発生するのでしょうか。
これらはなにか意味があるのでしょうか、
ほかにも、同じ仕事をするのに、実行時間差が生じるものはあるとおもいます。
すみません。初心者なのでわかりやすい説明をおまちしています。
Re: 実行時間差について
Posted: 2012年10月08日(月) 22:22
by softya(ソフト屋)
着眼点は悪くないですね。ただ、実際に速度差を計測してみましたか?
幾つかバリエーションで速度差を実際に計測してみてください。
次に勉強のためには、なぜ速度差が生じるのか推測を立てることが重要です。
何が原因だと予想しますか? 思いつくものを書き並べてみてください。
【補足】
計測の仕方次第ではコンソール出力の問題でputsが不利になることもあります。
同条件に持ち込めればprintfとの差が小さい場合も大きな差が出る場合もあることが分かると思います。
自分で実際に確かめることが科学の実験同様にプログラミングでも重要です。
「時間測定関数の性能(分解能と最大値)のまとめ」
http://www.hiramine.com/programming/win ... rison.html
timeGetTime()とtimeBeginPeriod(1);を使ってください。
Re: 実行時間差について
Posted: 2012年10月08日(月) 22:25
by box
みるく さんが書きました:
同じ仕事をする関数(たとえばprintfとputs)
まあ、標準出力に出力する、という点だけを取れば「同じ仕事をする」と
いえるのかもしれませんが、実際に行なっていること(関数の中身:実装)はかなり異なっていそうです。
putsはchar *型だけを相手にしますが、
printfはchar *型以外の型も相手にしますし、書式文字列に見合う形に変換するのに
時間がかかりそうです。
学習を進めていくうちに、例えば「何かをソートする」という同じ仕事をする
関数(アルゴリズム、という方が適切かもしれません)においても、実装によって
実行時間がずいぶん異なる、というようなことがおわかりになってくると思います。