brk y sbrk son llamadas al sistema de administración de memoria básicautilizadas en sistemas operativos Unix y similares a Unix para controlar la cantidad de memoria asignada al segmento de montón del proceso . [ 1 ] Estas funciones se llaman normalmente desde una función de biblioteca de administración de memoria de nivel superior como malloc . En el sistema Unix original,yeran las únicas formas en que las aplicaciones podían adquirir espacio de montón adicional; versiones posteriores permitieron que esto también se hiciera utilizando la llamada mmap . [ 2 ] [ 3 ] Se encuentra en el encabezado <unistd.h> , en la biblioteca C POSIX .brk()sbrk()
Descripción
Las llamadas `brk` y `sbrk` modifican dinámicamente la cantidad de espacio asignado al segmento de memoria dinámica del proceso que las llama. El cambio se realiza restableciendo el punto de interrupción del programa, que determina el espacio máximo que se puede asignar. El punto de interrupción del programa es la dirección de la primera ubicación más allá del final actual de la región de datos. La cantidad de espacio disponible aumenta a medida que aumenta el valor del punto de interrupción. El espacio disponible se inicializa a cero, a menos que se reduzca y luego se aumente el punto de interrupción, ya que podría reutilizar las mismas páginas de alguna manera no especificada. El valor del punto de interrupción se puede redondear automáticamente a un tamaño adecuado para la arquitectura de gestión de memoria . [ 4 ]
sbrky brkse consideraban heredadas incluso según los estándares de 1997 ( Single UNIX Specification v2 o POSIX.1-1998). [ 5 ] Se eliminaron en POSIX.1-2001. [ 6 ]
Firmas de función y comportamiento
int brk ( void * end_data_segment ); void * sbrk ( intptr_t increment );sbrkSe utiliza para ajustar el valor de interrupción del programa añadiendo un tamaño posiblemente negativo, mientras que brkse utiliza para establecer el valor de interrupción al valor de un puntero. Establezca incrementel parámetro en cero para obtener el valor actual de la interrupción del programa.
Tras su correcta ejecución, la brksubrutina devuelve un valor de 0 y sbrkel valor anterior del punto de interrupción del programa (si el espacio disponible aumenta, este valor anterior también apunta al inicio de la nueva área). Si alguna de las subrutinas falla, −1se devuelve un valor y se establece la variable global errno para indicar el error. [ 5 ]
No todos los sistemas tipo Unix contemplan el concepto de que el usuario controle el segmento de datos . La implementación de Mac OS Xsbrk es una emulación y tiene una asignación máxima de 4 megabytes. En la primera llamada, se asigna un área exactamente de este tamaño para almacenar el segmento simulado. Cuando se alcanza este límite, se devuelve -1 y se errnoestablece en ENOMEM. brksiempre genera errores. [ 7 ]
Códigos de error
El error ENOMEMse establece y el espacio asignado permanece sin cambios si se cumple una o más de las siguientes condiciones:
- El cambio solicitado asigna más espacio del permitido por el máximo impuesto por el sistema.
- El cambio solicitado establece el valor de ruptura en un valor mayor o igual a la dirección de inicio de cualquier segmento de memoria compartida conectado .
Véase también
Referencias
- ↑ "Conceptos de memoria de proceso" . Free Software Foundation . Consultado el 9 de octubre de 2015 .
- ↑ "Una nueva función malloc(3) para OpenBSD" (PDF) . Consultado el 13 de junio de 2018 .
- ↑ "Gestión de memoria POSIX" . blog.pr4tt.com .
- ↑ Especificación X/Open CAE, Interfaces del sistema y encabezados (PDF) (2.ª ed.). X/Open Company Ltd., Reino Unido, septiembre de 1994. pág. 64. Consultado el 9 de octubre de 2015 .
- 1 2 "brk, sbrk - cambiar asignación de espacio (LEGADO)" . La Especificación Única UNIX ®, Versión 2. 1997. Recuperado el 30 de noviembre de 2019 .
- ↑ – Manual del programador de Linux – Llamadas al sistema
- ↑ "brk.c" . apple-oss-distributions/Libc . 6 de octubre de 2021. Archivado del original el 8 de agosto de 2025. Recuperado el 8 de agosto de 2025 .
- Gestión de la memoria
- API del sistema operativo