es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

MADV_DONTNEED en memoria compartida anónima.

Me gustaría reclamar páginas para la región de memoria asignada por mmap (MAP_SHARED | MAP_ANONYMOUS).

Para este propósito, llamé a madvise (MADV_DONTNEED) para esta memoria compartida desde todos los procesos que pueden ver esta región compartida.

Sin embargo, las páginas físicas de esta región compartida no se pueden liberar y los datos compartidos permanecen en la memoria compartida.

¿Cómo se pueden reclamar completamente las páginas para la región de memoria asignada por mmap (MAP_SHARED | MAP_ANONYMOUS)?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para recuperar completamente las páginas para la región de memoria mapeada por mmap(MAP_SHARED | MAP_ANONYMOUS), puedes seguir los siguientes pasos:

    1. Asegúrate de que todos los procesos que tienen acceso a la región de memoria compartida hayan llamado a madvise(MADV_DONTNEED) para aconsejar al kernel que las páginas ya no son necesarias.
    2. Desmapea la memoria compartida utilizando munmap().

    3. Utiliza la función ftruncate() o truncate() para establecer el tamaño de la región de memoria compartida en 0. Esto liberará cualquier página física que aún esté asociada con la memoria compartida.

    4. Cierra el descriptor de archivo devuelto por la llamada inicial a mmap().

    Siguiendo estos pasos, deberías poder liberar completamente cualquier página física asociada con la región de memoria compartida y recuperar la memoria utilizada por los datos compartidos.

Comments are closed.