Ich möchte Speicher auf den riesigen Seiten reservieren, die von einem Linux-Rechner verwendet werden. Ich sehe, dass es zwei Möglichkeiten gibt, dies zu tun, mit mmap
und .Verwenden von mmap und madvise für große Seiten
Das heißt, mit der MAP_HUGETLB
Flagge mit dem mmap
Anruf -
base_ptr_ = mmap(NULL, memory_size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
Und die MADV_HUGEPAGE
Flagge mit dem madvise
Anruf -
madvise(base_ptr_, memory_size_, MADV_HUGEPAGE);
Könnte jemand den Unterschied zwischen den beiden erklären?
So gegeben, es gibt genug Seiten verfügbar ... 'mmap' ist die zuverlässigere Option? Ist das korrekt? – subzero
Es hängt davon ab, ob Sie alles, was sich auf der Maschine befindet, kontrollieren und genau wissen, wie sich Ihr Programm verhalten wird. Mit "mmap" können Sie genau festlegen, wie sich das Programm verhalten soll. Wenn Sie nicht sicher sind, wie der Speicher verwendet wird (wird er fragmentiert? Gibt es andere große Seitenbenutzer im System), dann wird Ihnen die transparente rigipage das bestmögliche Ergebnis geben. –