Provided by:
manpages-es_1.55-10_all 
NOMBRE
madvise - aconseja sobre el uso de memoria
SINOPSIS
#include <sys/mman.h>
int madvise(void *start, size_t length, int advice);
DESCRIPCI'ON
La llamada al sistema madvise aconseja al nucleo sobre como manejar la
paginacion de entrada/salida en el rango de direcciones que comienza en
start y tiene de longitud length bytes. Permite a una aplicacion
decirle al nucleo como espera usar algunas zonas de memoria compartida
o mapeada, para que asi el nucleo pueda elegir las tecnicas apropiadas
de pre-lectura y cache. Esta llamada no influye en la semantica de la
aplicacion (excepto en el caso de MADV_DONTNEED), pero puede influir en
su rendimiento. El nucleo puede ignorar libremente este consejo.
El consejo se indica en el parametro advice que puede tomar los valores
MADV_NORMAL
Trato no especial. Este es el valor por defecto.
MADV_RANDOM
Espera las referencias a paginas en orden aleatorio. (Por
tanto, la pre-lectura puede ser menos util de lo habitual.)
MADV_SEQUENTIAL
Espera las referencias a paginas en orden secuencial. (Por
tanto, las paginas en el rango dado pueden ser accedidas con
pre-lectura y liberadas poco despues del acceso.)
MADV_WILLNEED
Espera algun acceso en un futuro cercano. (Por tanto, seria
buena idea leer algunas paginas por adelantado.)
MADV_DONTNEED
No esperes ningun acceso en un futuro cercano (por el momento,
la aplicacion ha terminado de usar el rango especificado, por lo
que el nucleo puede liberar recursos asociados a la misma). Los
accesos siguientes a paginas en este rango tendran exito, pero
produciran o bien que se vuelva a cargar el contenido de memoria
desde el fichero mapeado subyacente (vease mmap) o bien paginas
llenas de ceros para mapeos sin fichero subyacente.
VALOR DEVUELTO
En caso de exito 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 limite de
pagina, advice no es un valor valido, o la aplicacion esta
intentado liberar paginas bloqueadas o compartidas (con
MADV_DONTNEED).
ENOMEM las direcciones en el rango especificado no estan mapeadas
actualmente, o estan fuera del rango de direcciones del proceso.
ENOMEM (para MADV_WILLNEED) Memoria insuficiente - paginacion fallida.
EIO (para MADV_WILLNEED) La paginacion de esta area excederia el
tamano maximo para el conjunto residente.
EBADF existe la correspondencia, pero el area mapeada no se
corresponde con un fichero.
EAGAIN un recurso del nucleo esta temporalmente no disponible.
OBSERVACIONES LINUX
La implementacion actual de Linux (2.4.0) ve esta llamada al sistema
mas como una orden que como un consejo y por lo tanto puede devolver un
error cuando no puede llevar a cabo lo que habitualmente podria en
respuesta a este consejo. (Vease la descripcion de ERRORES arriba.)
Este es un comportamiento no estandar.
La implementacion de Linux requiere que la direccion start comienze en
un limite de pagina, y permite que length sea cero. Si algunas partes
del rango de direcciones especificado no estan mapeadas, la version de
Linux de madvise las ignora y aplica la llamada sobre el resto (pero
devuelve ENOMEM como deberia ser).
HISTORIA
La funcion madvise aparecio 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 aqui. Hay un posix_fadvise similar para acceso a ficheros.
V'EASE TAMBI'EN
getrlimit(2), mmap(2), mincore(2), mprotect(2), msync(2), munmap(2)