Historias
Slashboxes
Comentarios
 
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • malloc?

    (Puntos:0)
    por pobrecito hablador el Miércoles, 20 Febrero de 2008, 21:18h (#1017742)
    Curioso... Hasta donde me enseñaron, los programas piden memoria y el sistema operativo la gestiona y da a los programas lo que piden, si es posible, claro.

    Como se come que un programa sea el que gestione la memoria? Seguro que se me escapa algun detalle. Algun alma caritativa que lo pueda explicar?

    Gracias!
  • Re:malloc?

    (Puntos:3, Interesante)
    por afobutu (20358) el Miércoles, 20 Febrero de 2008, 21:28h (#1017743)
    ( http://localhost:8080/ )
    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.
    --

    --------
    Así habló Zaratustra.
    [ Padre ]
    • Re:malloc? de afobutu (Puntos:2) Miércoles, 20 Febrero de 2008, 23:18h
    • 1 respuesta por debajo de tu umbral de lectura actual.
  • Re:malloc?

    (Puntos:5, Informativo)
    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.
    [ Padre ]
    • Re:malloc? de pobrecito hablador (Puntos:2) Jueves, 21 Febrero de 2008, 01:20h
    • Re:malloc? de Reynard (Puntos:1) Jueves, 21 Febrero de 2008, 04:11h
    • 1 respuesta por debajo de tu umbral de lectura actual.
  • Re:malloc?

    (Puntos:4, Informativo)
    por mig21 (7781) <reversethis-{moc.liamg} {ta} {pb12gim}> el Miércoles, 20 Febrero de 2008, 22:50h (#1017787)
    ( https://twitter.com/yapw | Última bitácora: Viernes, 13 Mayo de 2011, 21:21h )
    creo que este enlace responde a tu pregunta: jemalloc builds [pavlov.net]
    --
    Aquí había una firma
    [ Padre ]
  • Re:malloc?

    (Puntos:5, Informativo)
    por Draco (3721) el Jueves, 21 Febrero de 2008, 07:30h (#1017859)
    ( Última bitácora: Lunes, 22 Febrero de 2016, 07:16h )
    Depende a qué llames "Sistema Operativo".

    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

    [ Padre ]
    • Re:malloc? de mig21 (Puntos:2) Jueves, 21 Febrero de 2008, 08:50h
    • 1 respuesta por debajo de tu umbral de lectura actual.
  • Re:malloc?

    (Puntos:3, Informativo)
    por aplatana2 (22096) el Jueves, 21 Febrero de 2008, 10:23h (#1017915)
    ( http://drupal.gulic.org/blog/aplatanado )
    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.
    [ Padre ]