Genaue Zeitmessung unter MacOS

Die exakte Zeitmessung mit MacOS wird mit der Funktion mach_absolute_time() durchgeführt. Diese Funktion findet sich im Darwinkernel in den Includes in der Datei mach/mach_time.h. Um eine klare Aussage zu treffen, wieviel Zeit genau vergangen ist, hilft die Funktion AbsoluteToNanoseconds() in den CoreServices des MacOS.

#include <mach/mach_time.h>
#include <CoreServices/CoreServices.h>

Mit folgender Funktion lässt sich die aktuelle Zeit als 64 Bit Integer darstellen:

uint64_t timeAsNanoseconds(void)
{
  uint64_t t = mach_absolute_time();
  return *(uint64_t *) &AbsoluteToNanoseconds(* (AbsoluteTime*) &t);
}

Nun können wir die Zeit messen, die ein Vorgang benötigt:

uint64_t begin, end;
 
begin = timeAsNanoseconds();
 
/* Programmabschnitt, dessen Zeit gemessen werden soll */
 
end = timeAsNanoSeconds();

Die benötigte Zeit lässt sich nun wie folgt in Nanosekunden berechnen:

uint64_t elapsed = end - begin;

Um diesen Quelltext zu kompilieren muss das CoreServices-Framework an dem Compiler übergeben werden, zum Beispiel:

gcc test.c -framework CoreServices



siehe auch: MacResearch