Provided by: manpages-es_1.55-10_all bug

NOMBRE

       madvise - aconseja sobre el uso de memoria

SINOPSIS

       #include <sys/mman.h>

       int madvise(void *start, size_t length, int advice);

DESCRIPCIÓN

       La  llamada  al  sistema  madvise  aconseja  al núcleo sobre como manejar la paginación de
       entrada/salida en el rango de direcciones que comienza en start y tiene de longitud length
       bytes.  Permite  a  una  aplicación  decirle  al  núcleo como espera usar algunas zonas de
       memoria compartida o mapeada, para que así el núcleo pueda elegir las técnicas  apropiadas
       de pre-lectura y caché.  Esta llamada no influye en la semántica de la aplicación (excepto
       en el caso de MADV_DONTNEED), pero puede  influir  en  su  rendimiento.  El  núcleo  puede
       ignorar libremente este consejo.

       El consejo se indica en el parámetro advice que puede tomar los valores

       MADV_NORMAL
              Trato no especial. Éste es el valor por defecto.

       MADV_RANDOM
              Espera  las  referencias  a páginas en orden aleatorio.  (Por tanto, la pre-lectura
              puede ser menos útil de lo habitual.)

       MADV_SEQUENTIAL
              Espera las referencias a páginas en orden secuencial.  (Por tanto, las  páginas  en
              el  rango  dado  pueden  ser accedidas con pre-lectura y liberadas poco después del
              acceso.)

       MADV_WILLNEED
              Espera algún acceso en un futuro  cercano.   (Por  tanto,  sería  buena  idea  leer
              algunas páginas por adelantado.)

       MADV_DONTNEED
              No  esperes  ningún  acceso  en un futuro cercano (por el momento, la aplicación ha
              terminado de usar el rango  especificado,  por  lo  que  el  núcleo  puede  liberar
              recursos  asociados  a  la  misma).  Los accesos siguientes a páginas en este rango
              tendrán exito, pero producirán o bien que  se  vuelva  a  cargar  el  contenido  de
              memoria  desde  el fichero mapeado subyacente (véase mmap) o bien páginas llenas de
              ceros para mapeos sin fichero subyacente.

VALOR DEVUELTO

       En caso de éxito madvise devuelve cero. En caso de error, devuelve -1 y modifica errno con
       el valor apropiado.

ERRORES

       EINVAL el  valor  len es negativo, start no se encuentra en un límite de página, advice no
              es un valor válido, o la aplicación está intentado  liberar  páginas  bloqueadas  o
              compartidas (con MADV_DONTNEED).

       ENOMEM las  direcciones  en  el  rango especificado no están mapeadas actualmente, o están
              fuera del rango de direcciones del proceso.

       ENOMEM (para MADV_WILLNEED) Memoria insuficiente - paginación fallida.

       EIO    (para MADV_WILLNEED) La paginación de esta área excedería el tamaño máximo para  el
              conjunto residente.

       EBADF  existe la correspondencia, pero el área mapeada no se corresponde con un fichero.

       EAGAIN un recurso del núcleo está temporalmente no disponible.

OBSERVACIONES LINUX

       La  implementación  actual  de Linux (2.4.0) ve esta llamada al sistema más como una orden
       que como un consejo y por lo tanto puede devolver un error cuando no puede llevar  a  cabo
       lo  que habitualmente podría en respuesta a este consejo. (Véase la descripción de ERRORES
       arriba.)  Éste es un comportamiento no éstandar.

       La implementación de Linux requiere que la  dirección  start  comienze  en  un  límite  de
       página,  y  permite  que  length  sea  cero.  Si  algunas  partes del rango de direcciones
       especificado no están mapeadas, la versión de Linux de madvise  las  ignora  y  aplica  la
       llamada sobre el resto (pero devuelve ENOMEM como debería ser).

HISTORIA

       La función madvise apareció por primera vez en 4.4BSD.

CONFORME A

       POSIX.1b   (POSIX.4).    POSIX  1003.1-2001  describe  posix_madvise  con  las  constantes
       POSIX_MADV_NORMAL,  etc.,  con  un  comportamiento  parecido  al  descrito  aquí.  Hay  un
       posix_fadvise similar para acceso a ficheros.

VÉASE TAMBIÉN

       getrlimit(2), mmap(2), mincore(2), mprotect(2), msync(2), munmap(2)