2010-05-21 8 views
5

In Windows, per applicazioni molto esigenti, un programmatore può utilizzare HeapCreate, HeapAlloc per gestire e controllare meglio l'allocazione della memoria, accelerandola (ovvero allocatori privati). Qual è l'equivalente nella programmazione in C++ di Linux?HeapCreate, HeapAlloc in Linux, allocatore privato per Linux

+0

È possibile fornire un confronto del codice sorgente di Windows utilizzando HeapCreate(). HeapAlloc(). HeapFree(). e codice sorgente usando mmap(). funziona per fare la stessa cosa? – PatrickM

risposta

3

Se si desidera utilizzare il proprio allocatore privato, utilizzare mmap() per mappare una quantità di memoria nel processo, quindi è possibile utilizzare quella memoria come desiderato. Aprire un descrittore di file su /dev/zero e quindi utilizzarlo come parametro "fildes" su mmap(). Vedi man mmap per i dettagli completi dei parametri da passare. A questo proposito, mmap() ha lo stesso ruolo di HeapCreate().

+2

Non è necessario aprire '/ dev/zero' - puoi semplicemente usare il flag' MAP_ANONYMOUS' e passare -1 come argomento 'fd'. – caf

+0

Vero, ed è spesso più veloce se lo fai, anche se 'MAP_ANONYMOUS' è meno portabile (ad esempio non è incluso in SUSv2). Ma hai ragione, lo farebbe quasi sicuramente in questa situazione :-) – psmears

+0

SUSv2? Chi dà un sottaceto :) –