GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuáles son las llamadas al sistema operativo/sistema nativo de Windows y Linux realizadas desde malloc()?

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.


Linux
  1. Cómo verificar la versión del sistema operativo y Linux

  2. ¿Cuál es el nivel de ejecución actual del sistema Linux?

  3. Linux:¿cómo averiguar qué discos duros hay en el sistema?

  4. ¿Cuáles son las opciones de montaje para mejorar el rendimiento del sistema de archivos ext4 en Linux?

  5. ¿Llamadas al sistema en Windows y API nativa?

¿Cuál es la diferencia entre Linux y Unix?

¿Qué son las llamadas al sistema Linux y las funciones de biblioteca?

¿Cuáles son las convenciones de llamada para las llamadas del sistema UNIX y Linux (y funciones de espacio de usuario) en i386 y x86-64?

¿Cuáles son las diferencias entre lsof y netstat en Linux?

¿Cuáles son las diferencias entre los archivos .txt de Linux y Windows (codificación Unicode)?

¿Cuál es la diferencia entre una llamada de biblioteca y una llamada de sistema en Linux?