私はcppコードを実行していましたが、Windows7ではC++コードのCLOCKS_PER_SECが1000になり、Linuxのfedora 16では1000000になります。この動作を正当化できる人はいますか?
2 に答える
何を正当化するのですか? CLOCKS_PER_SEC
実装定義であり、何でもかまいません。それはすべて、関数によって返される単位を示しています
clock()
。の解像度も示していませんclock()
。Posix では、実際の解像度に関係なく、1000000 である必要があります。Windows が 1000 を返している場合、それもおそらく実際の解像度ではありません。(私の Linux ボックスの解像度は 10 ミリ秒で、Windows ボックスの解像度は 15 ミリ秒です。)
基本的に、clock()
関数の実装には、さまざまなオペレーティング システムに対してある程度の余裕があります。Linux Fedora では、クロックの刻みが速くなります。1秒間に100万回刻みます。
このクロック ティックは、別の抽象化レイヤーにある CPU のクロック レートとは異なります。Windows は、クロック ティックの数をミリ秒数に等しくしようとします。
このマクロは、関数 clock によって返される、1 秒間のクロック ティック数を表す式に展開されます。
クロック ティックのカウントをこの式で割ると、秒数が得られます。
CLK_TCK は、このマクロの古いエイリアスです。
参照: http://www.cplusplus.com/reference/clibrary/ctime/CLOCKS_PER_SEC/
また、Windows の実装は真のリアルタイムアプリケーション向けではないことも知っておく必要があります。1000 ティック クロックは、ハードウェア クロックを 2 の累乗で割ることによって得られます。これは、実際には 1024 ティック クロックを取得することを意味します。これを 1000 ティック クロックに変換するために、Windows は特定のティックをスキップします。つまり、一部のティックは他のティックよりも遅くなります。
通常、タイミングには別のハードウェア クロック (CPU クロックではない) が使用されます。参照: http://en.wikipedia.org/wiki/Real-time_clock