gccコンパイラを使用して、Mac OSX64ビット環境でタイムスタンプをサンプリングするための最良の方法を理解しようとしています。x86アーキテクチャのTSCレジスタとIntelプロセッサ用のHPETについて読みましたが、それらを使用するためのガイドが見つかりません。実はこの機能を試してみましたgettimeofday()
が、ナノ秒の精度が必要です。
誰かが私を導くことができますか?
OS Xでは、このmach_absolute_time
関数を使用して高精度のタイムスタンプを取得できます。
#include <mach/mach_time.h>
#include <stdint.h>
/* get timer units */
mach_timebase_info_data_t info;
mach_timebase_info(&info);
/* get timer value */
uint64_t ts = mach_absolute_time();
/* convert to nanoseconds */
ts *= info.numer;
ts /= info.denom;
何かの時間を計ろうとしている場合は、オーバーフローの問題を回避するために、タイムスタンプ間の差(期間)に対して最後のナノ秒変換を実行する必要があることに注意してください。