2010-05-21 38 views
5

En Windows, para aplicaciones muy exigentes, un programador puede usar HeapCreate, HeapAlloc para administrar y controlar mejor la asignación de memoria, acelerarlo (también conocidos como asignadores privados). ¿Cuál es el equivalente en la programación de Linux C++?HeapCreate, HeapAlloc en Linux, asignador privado para Linux

+0

Puede proporcionar una comparación del código fuente de Windows usando HeapCreate(). HeapAlloc(). Heapfree() y el código fuente usando mmap(). funciones para hacer lo mismo? – PatrickM

Respuesta

3

Si desea utilizar su propio asignador privado, utilice mmap() para asignar una cantidad de memoria a su proceso, luego puede usar esa memoria como desee. Abra un descriptor de archivo en /dev/zero y luego utilícelo como el parámetro 'fildes' en mmap(). Ver man mmap para más detalles de los parámetros a pasar. A este respecto, mmap() juega el mismo rol que HeapCreate().

+2

No necesita abrir '/ dev/zero' - puede simplemente usar la bandera' MAP_ANONYMOUS' y pasar -1 como el argumento 'fd'. – caf

+0

Es cierto, y a menudo es más rápido si lo hace, aunque 'MAP_ANONYMOUS' es menos portátil (por ejemplo, no está incluido en SUSv2). Pero tienes razón, casi con seguridad lo harías en esta situación :-) – psmears

+0

SUSv2? Quién da un pepinillo :) –