- std::weak_ptr<>
- std::copy_if<>
- std::mutex
- std::mem_fun
- std::chrono::high_resolution_clock
Oft muss man die Laufzeit eines Programmteils in der höchstmöglichen Genauigkeit messen. Klingt einfach, ist es aber nicht. Siehe zum Beispiel den Wiki Artikel zum Time Stamp Counter. Doch zum Glück gibt es seit C++ 11 eine Bibliotheksfunktion die uns von den grusligen Details verschont und ziemlich genau die Zeit in Nanosekunden (d.h milliardstel Sekunden) liefert.
Die Messung selbst ist nicht kostenlos. Insbesondere wenn man einen Codeblock auf die hier gezeigte Weise misst. Hier wird nämlich ein Teil des dieses Aufwands zur Laufzeit hinzugezählt. Es sieht so aus als wenn Nichts-Tun auch Zeit verbrauchen würde. Dieses Gundrauschen sind immerhin 70ns bis 500ns. Zwischen dem Auslesen des Start-Wertes aus der CPU und dem Auslesen des End-Wertes wir noch eine ganze Menge anderer Kram ausgeführt der mit der Zeitmessung zu tun hat.
#include <iostream>
#include <chrono>
int main()
{
auto start = std::chrono::high_resolution_clock::now();
// Hier die Operation die zu messen ist.
auto ende = std::chrono::high_resolution_clock::now();
int nanosekunden = std::chrono::duration_cast<std::chrono::nanoseconds>(ende-start).count();
// Dividiere die Nanosekunden durch 10^3 für Mikrosekunden,
// durch 10^6 für Millisekunden oder wie hier durch 10^9
// für die Zeit in Sekunden.
double sekunden = nanosekunden/1000000000.0;
fprintf(stderr, "%dns = %.9lfs\n", nanosekunden, sekunden);
}