En Windows, en versiones recientes de MSVC, malloc (y C++ new
, ya que se implementa utilizando los mismos fundamentos para la parte de asignación de memoria real de new
) llama a HeapAlloc()
. En otras versiones, como g++ mingw, el tiempo de ejecución de C es una versión anterior, que no llama tan directamente a HeapAlloc
, pero en la base sigue siendo HeapAlloc
- para encontrar algo diferente, debemos volver a Windows anterior a 95, que tenía un GlobalAlloc
y LocalAlloc
conjunto de funciones, pero no creo que la gente use compiladores de 16 bits en estos días, al menos no para la programación de Windows.
En Linux, si está usando glibc
, depende del tamaño de la asignación si llama a sbrk
o mmap
- mmap
(con MAP_ANONYMOUS
en las banderas) se usa para asignaciones más grandes (por encima de un umbral, que creo que es de 2 MB en la implementación típica)
malloc() y amigos se consideran parte del sistema de tiempo de ejecución que viene con un compilador. Por lo tanto, cada compilador puede usar y usa diferentes llamadas del sistema operativo para implementar malloc.
Como han dicho otros, en Linux las opciones son sbrk() y mmap().
En Windows, las opciones son HeapAlloc() y VirtualAlloc().
Mi pregunta es:¿cómo se implementa malloc en los siguientes sistemas operativos?
En Linux hay dos famosos malloc
implementaciones:
dlmalloc (malloc de Doug Lea)
ptmalloc
En Linux libc como glibc, eglibc o newlib, implemente ptmalloc o una variante de ptmalloc.
¿Cuáles son las funciones específicas del sistema operativo que se llaman/implementaciones de malloc()?
En sistemas Unix y Linux sbrk
y mmap
Se utilizan llamadas al sistema. Ver man 2 sbrk
y man 2 mmap
para más información.
Muy bien, no estoy seguro acerca de Linux, pero cuando se trata de Windows...
La memoria se puede asignar en dos lugares categorizados.
1) Montones (Montón de proceso, Montones creados a medida) consulte -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366711(v=vs.85).aspx usando funciones como HeapAlloc y HeapFree. LocalAlloc y LocalFree se pueden usar como "accesos directos" a HeapAlloc cuando desea asignar en el montón de proceso predeterminado.
2) Memoria virtual (generalmente solo específica del proceso debido a restricciones de acceso en la memoria virtual global por seguridad), usando VirtualAlloc, VirtualFree. ver -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366916(v=vs.85).aspx
Que yo sepa, malloc usará las funciones de asignación de montón en Windows.
Espero que esto ayude.