Provided by:
manpages-es_1.55-8_all 
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)