Igual me equivoco, pero lo que hará será pedir al principio una gran cantidad de memoria contigua al S.O., y luego gestionarla internamente para ir dándose trocitos a sí mismo, así, chabacanamente explicado.
por
pobrecito hablador
el Miércoles, 20 Febrero de 2008, 21:37h
(#1017749)
El programador sabe mejor que el sistema operativo el uso que va a dar a la memoria. Un ejemplo sencillo es cuando trabajas con colecciones de cadenas: puedes hacer un malloc/una reserva por cada cadena que vayas necesitando pero es más efeciente reservar al principio una pool grande común a todas e ir repartiendo la memoria a discrección.
Otra ventaja es que, al hacer solo una asignación real (un malloc), solo con un free has liberado todas las cadenas. Eso simplifica la liberación de recursos en caso de error o al finalizar el algoritmo (claro que complica la liberación de cadenas sueltas)
No es el caso porque gecko está escrito en un subconjunto de C++ pero fíjate si es común aplicar tu propio esquema de manejo de memoria que ese lenguaje ya viene preparado para que "enchufes" el tuyo, tanto si trabajas con contenedores estándar [sgi.com] como si no lo haces [glenmccl.com]. En otros lenguajes como Java no hay esa flexibilidad pero sigues teniendo el recolector de basura que aplica su propio esquema sobre los malloc/free del sistema.
Si con eso te refieres tan solo al kernel, verás que no hay ninguna llamada al sistema "malloc". Hay brk(), que simplemente aumentan el tamaño del heap y mmap() que reserva zonas completas de memoria, normalmente del tamaño de páginas.
mmap() funciona en espacio de usuario y hace uso de estas llamadas. Tú puedes usar el malloc por defecto en tu sistema, o usar el tuyo propio(en Solaris vienen varias implementaciones de malloc).
--
Programs should be written for people to read,
and only incidentally for machines to execute
Como ya se ha dicho en otros comentarios malloc no es una llamada del sistema en Linux. Es una función de la libc que se implementa mediante una pocas llamadas. Así que parte del trabajo de gestionar la memoria del proceso la hace la propia libc, normalmente pidiendo grandes cantidades de memoria al sistema para posteriormente dividirla y asignarla según lo pida el programa mediante malloc.
Como ejemplo me acuerdo de cuando programaba en Borlanda para Windows. Ellos decían que tenían la mejor gestión de memoria. Mucho más eficiente que la del runtime de Microsoft. Pero eso no evita que tuvieran que utilizar las llamadas al sistema para pedir la memoria al windows.
Re:malloc?
(Puntos:3, Interesante)( http://localhost:8080/ )
--------
Así habló Zaratustra.
Re:malloc?
(Puntos:5, Informativo)Otra ventaja es que, al hacer solo una asignación real (un malloc), solo con un free has liberado todas las cadenas. Eso simplifica la liberación de recursos en caso de error o al finalizar el algoritmo (claro que complica la liberación de cadenas sueltas)
No es el caso porque gecko está escrito en un subconjunto de C++ pero fíjate si es común aplicar tu propio esquema de manejo de memoria que ese lenguaje ya viene preparado para que "enchufes" el tuyo, tanto si trabajas con contenedores estándar [sgi.com] como si no lo haces [glenmccl.com]. En otros lenguajes como Java no hay esa flexibilidad pero sigues teniendo el recolector de basura que aplica su propio esquema sobre los malloc/free del sistema.
Re:malloc?
(Puntos:4, Informativo)( https://twitter.com/yapw | Última bitácora: Viernes, 13 Mayo de 2011, 21:21h )
Aquí había una firma
Re:malloc?
(Puntos:5, Informativo)( Última bitácora: Lunes, 22 Febrero de 2016, 07:16h )
Si con eso te refieres tan solo al kernel, verás que no hay ninguna llamada al sistema "malloc". Hay brk(), que simplemente aumentan el tamaño del heap y mmap() que reserva zonas completas de memoria, normalmente del tamaño de páginas.
mmap() funciona en espacio de usuario y hace uso de estas llamadas. Tú puedes usar el malloc por defecto en tu sistema, o usar el tuyo propio(en Solaris vienen varias implementaciones de malloc).
Programs should be written for people to read, and only incidentally for machines to execute
Re:malloc?
(Puntos:3, Informativo)( http://drupal.gulic.org/blog/aplatanado )
Como ejemplo me acuerdo de cuando programaba en Borlanda para Windows. Ellos decían que tenían la mejor gestión de memoria. Mucho más eficiente que la del runtime de Microsoft. Pero eso no evita que tuvieran que utilizar las llamadas al sistema para pedir la memoria al windows.