Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

564
Vistas
¿Por qué malloc() se considera una llamada a la biblioteca y no una llamada al sistema?

¿Por qué malloc() se considera una función de biblioteca C estándar y no una llamada al sistema? Parece que el sistema operativo es responsable de manejar todas las solicitudes de asignación de memoria.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Sin duda, sería posible implementar malloc y free como llamadas al sistema, pero rara vez se hace de esa manera.

Las llamadas al sistema son llamadas al kernel del sistema operativo. Por ejemplo, en sistemas POSIX (Linux, UNIX, ...), read y write son llamadas al sistema. Cuando un programa C llama a read , probablemente esté llamando a un contenedor que hace lo que sea necesario para realizar una solicitud al núcleo y luego devolver el resultado a la persona que llama.

Resulta que la forma más eficiente de administrar la memoria es usar llamadas al sistema de nivel inferior (ver brk y sbrk ) para expandir el segmento de datos del proceso actual y luego usar llamadas a la biblioteca ( malloc , free , etc.) para administrar la memoria. dentro de ese segmento. Esa gestión no requiere ninguna interacción con el kernel; todo es solo manipulación de puntero realizada dentro del proceso actual. La función malloc invocará una llamada al sistema como brk o sbrk si necesita más memoria de la que está disponible actualmente, pero muchas llamadas malloc no requerirán ninguna interacción con el núcleo.

Lo anterior es bastante específico para los sistemas Linux/POSIX/UNIX. Los detalles serán un poco diferentes para Windows, por ejemplo, pero es probable que el diseño general sea similar.

Tenga en cuenta que algunas funciones de la biblioteca estándar de C normalmente se implementan directamente como llamadas al sistema. time es un ejemplo (pero como señala Nick ODell en un comentario, a menudo se puede realizar una llamada de time sin interactuar con el núcleo).

over 4 years ago · Santiago Trujillo Denunciar

0

Parece que el sistema operativo es responsable de manejar todas las solicitudes de asignación de memoria.

Bueno, tanto si como no

En realidad, depende más de su sistema específico que de C.

La mayoría de los sistemas operativos asignan memoria en troncales de cierto tamaño. Típicamente llamado una página. El tamaño de la página puede diferir. Y en un sistema específico puede haber varios tamaños de página admitidos. 4K es un tamaño de página típico en muchos sistemas, pero es posible que se admitan páginas mucho más grandes.

Pero sí... al final del día solo hay una entidad que puede asignar memoria. el sistema operativo A menos que esté en el metal desnudo donde otro código puede manejarlo, si es que es compatible.

¿Por qué malloc() se considera una función de biblioteca C estándar y no una llamada al sistema?

La respuesta corta es: porque malloc no es un sistema operativo/llamada al sistema. Período.

Para elaborar un poco más. Una llamada malloc puede conducir a una llamada al sistema, pero la próxima malloc puede no hacerlo.

Por ejemplo: solicita 100 bytes usando malloc . malloc puede decidir llamar al sistema operativo. El sistema operativo te da 4K. En su próximo malloc solicita 500 bytes. Luego, la "capa intermedia" solo puede proporcionar los 500 bytes del enlace troncal ya proporcionado por la llamada al sistema anterior.

Así que no... la asignación de memoria a través de malloc puede no dar lugar a ninguna llamada al sistema para la asignación de más memoria.

Todo depende mucho de su sistema específico. Y al estándar C no le importa.

Pero malloc no es una llamada al sistema. malloc usa otras llamadas al sistema cuando es necesario.

over 4 years ago · Santiago Trujillo Denunciar

0

Parece que el sistema operativo es responsable de manejar todas las solicitudes de asignación de memoria.

Por razones de rendimiento, no es una buena idea pedir memoria al sistema operativo cada vez que el programa necesita memoria. Hay algunas razones para esto:

  1. El sistema operativo administra la memoria en unidades llamadas páginas. Las páginas suelen tener una longitud de 4096 bytes. (Pero algunas arquitecturas o sistemas operativos usan páginas más grandes ). El sistema operativo no puede asignar memoria a un proceso en un fragmento más pequeño que una página.

    Imagina que necesitas 10 bytes para almacenar una cadena. Sería un gran desperdicio asignar 4096 bytes y solo usar los primeros 10. Un asignador de memoria puede solicitar una página al sistema operativo y dividir esa página en asignaciones más pequeñas.

  2. Una llamada al sistema requiere un cambio de contexto. Un cambio de contexto es costoso (~100 ns en sistemas x86) en relación con llamar a una función en el mismo programa. Una vez más, es mejor solicitar una mayor cantidad de memoria y reutilizarla para muchas asignaciones.

¿Por qué malloc() se considera una llamada a la biblioteca y no una llamada al sistema?

Para algunas llamadas a la biblioteca, como read() , la implementación en la biblioteca es muy simple: llama a la llamada al sistema del mismo nombre. Una llamada a la función de biblioteca read() produce una llamada del sistema a read() . Es razonable describir read() como una llamada al sistema, porque todo el trabajo se realiza en el kernel.

La historia con malloc() es más complicada. No hay una llamada al sistema llamada malloc() , y la llamada de la biblioteca malloc() en realidad usará las llamadas al sistema sbrk() , brk() o mmap() , según el tamaño de su asignación y la implementación que esté usando. ¡La mayor parte del tiempo, no hace ninguna llamada al sistema!

Hay muchas opciones diferentes sobre cómo implementar malloc() . Por esa razón, verá muchas implementaciones diferentes que compiten, como jemalloc o tcmalloc .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda