Das Programm erfüllt sehr wahrscheinlich seinen namentlichen Zweck nicht, da dieser sich nur irgendwo 1 GiB virtuellen Speicher her besorgt und mit einem fixen 8-Bit-Muster (0100 0001) vollschreibt. Man müsste schon mit Inline-Assembler (z. B. CLFLUSH-/MFENCE-Instruktionen auf x86) dafür sorgen, dass die Muster tatsächlich im RAM landen. Ein "intelligenter" C-Compiler könnte vielleicht sogar die memset-Aufrufe völlig aushebeln, da der von der einen Funktion beschriebene Speicher ausschließlich von der anderen ausgelesen und sonst nicht benutzt wird - mit clang unter FreeBSD scheint laut dem Thread z. B. das gesamte Gigabyte einfach auf eine einzige Speicherseite gemappt zu werden, die mit diesem Muster gefüllt ist.
Ja, gute Punkte. Die Compileroptimierungen kriegt man mit volatile und Compiler-Barriers raus, wenn sie überhaupt greifen. Die Prozessoptimierungen sind schwieriger, Cache einerseits, insbesondere Prefetcher andererseits. Was wir damals für die Messung von Speicherlatenz in NUMA-Systemen gemacht haben, ist den Speicherbereich mit Pointern auf sich selber füllen und dann zufällig shuffeln. Und dann ein paar Millionen Iteration einfach den Pointern folgen. Den Cache kriegt man in der Regel durch genügend grosse Blöcke vergiftet, und der Prefetcher kann die zufälligen Muster nicht unendlich vorhersagen.
