【clock関数とtime関数】新明解C言語(中級編)学習メモ【MacOS】

 

こんにちは、やまぴー(@Astro8754)です。

 

『新明解C言語 中級編』を勉強していた際のメモです。

 

やまぴー
clock関数でプログラムの稼働時間を測ったけど、正しい時間が返ってこない。0.0秒になってしまう。

 

分からなくて調べたところ、同様の問題でつまずいている人も多かったので、結果をメモしておきます。

 



 

環境(MacOSです)と要求

 

『新明解C言語 中級編』ではP.46 (List 2-6) で暗算トレーニングの演習があり、MacOSの方はそのまま写経すると正しい動作にならないケースが多いのではないでしょうか。

 

僕はMacOSを使っており、editorはAtom。ターミナルで

 

~$ gcc -o test test.c

 

と(test.cを)コンパイルし、実行ファイル(test)を作成しています。

 

今回はList 2-6の演習を使いまわしても良いのですが、簡単のため、簡単な例題を自作しました。

 

要求

2桁の整数3つの和を3回正解するまでの時間を測るプログラム。

 

clock関数、time関数の両方を見ていきます。

 

clock関数による稼働時間の計測

 

まずは、clock関数によるプログラムです。

 

こちらは『新明解C言語 中級編』でも使われている書き方です。

 

 

開始時間 (start) と終了時間 (end) の差をdouble型に変換して、このままだと単位がミリ秒(ms)なので、CLOCKS_PER_SEC (=1000) で割って処理に要した時間(s)を計算しています。

 

ここでは、小数点以下第1位まで稼働時間を出力しています。実行結果はこちら。

 

 

稼働時間は0.0秒になってしまっています。

 

time関数による稼働時間の計測

 

一方、こちらはtime関数によるプログラムです。

 

 

clock関数から変更した場所をまとめると、次のようになります。

 

 

変えたのは開始時間・終了時間の代入部分と、処理に要した時間の計算部分ですね。

 

time関数は秒単位で小数点以下の出力はありませんが、MacOSでも正しく時間を測ることができます。実行結果はこちら。

 

 

しっかりと測れて、計算間違いもバッチリ(?)です。ちなみに、gettimeofday関数を使えばミリ秒まで計測可能だそうです。

 

clock関数とtime関数の違い

 

clock関数を使うと、使用したプロセッサ時間を求められます。(新明解C言語 (中級編) P.43)

 

一方のtime関数は、現在の暦時刻を決定します。(新明解C言語 (中級編) P.169)

 

MacOSでclock関数を使うと、CPUが稼働していた時間を返します。MacOSはマルチタスクのOSであり、ひとつのプログラムがCPUを独占することはないようです。

 

そのため、ひとつのプログラムで稼働時間を測ることができないということでした。

 

難しいですね!

 



 

clock関数とtime関数の考察(新明解C言語 中級編)

 

プログラミング学習はググることが大事ですね。

 

勉強しているテキストはこちらです。

 

 

今後もたまにメモを残せたらと思います。

 

やまぴー
Have fun!

 

プログラミング学習の過去記事もぜひ。下の文字列「おれぷろ」にリンクを貼っておきます!