Desidero allocare memoria sulle enormi pagine utilizzate da una macchina Linux. Vedo che ci sono due modi per farlo, usando mmap
e madvise
.Utilizzo di mmap e madvise per pagine enormi
Cioè, utilizzando il flag MAP_HUGETLB
con la chiamata mmap
-
base_ptr_ = mmap(NULL, memory_size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
E la bandiera MADV_HUGEPAGE
con la chiamata madvise
-
madvise(base_ptr_, memory_size_, MADV_HUGEPAGE);
Qualcuno potrebbe spiegare la differenza tra i due?
Quindi, dato ci sono abbastanza pagine disponibili ... 'mmap' è l'opzione più affidabile? È corretto? – subzero
Dipende, se controlli tutto ciò che si trova sulla macchina e sai esattamente come si comporterà il tuo programma, allora 'mmap' ti permetterà di specificare esattamente come comportarti. Se non sei sicuro di come verrà utilizzata la memoria (si frammenterà? Ci sono altri utenti enormi di pagine nel sistema), allora l'enorme pagina trasparente ti darà il miglior risultato possibile alla fine. –