Voltar à lista
Linux x86_64Memória#28

madvise

Dá ao kernel dicas sobre o padrão de uso esperado de uma região de memória, para orientar decisões de gerência de memória.

Descrição

Cobre desde otimizações de desempenho (MADV_SEQUENTIAL, MADV_WILLNEED) até operações com efeito real no conteúdo, como MADV_DONTNEED (descarta o conteúdo, zerando a região sob demanda) e MADV_FREE (marca páginas como reclamáveis sob pressão de memória, preservando o conteúdo até lá).

Header: sys/mman.hman 2

Atenção

MADV_DONTNEED em um mapeamento privado descarta o conteúdo das páginas imediatamente — usar por engano em dados ainda necessários causa perda silenciosa de dados.

Assinatura

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

Parâmetros

ParâmetroTipoDescrição
addrvoid *Início da região, alinhado ao tamanho de página.
lengthsize_tTamanho da região.
adviceintMADV_NORMAL, SEQUENTIAL, RANDOM, WILLNEED, DONTNEED, FREE, HUGEPAGE, entre outras.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1addrvoid *
rsiargumento 2lengthsize_t
rdxargumento 3adviceint

Valor de retorno

0 em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EACCES(13)
Permissão negada.
EAGAIN(11)
Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
EBADF(9)
Descritor de arquivo inválido.
EINVAL(22)
Argumento inválido.
ENOMEM(12)
Memória insuficiente para completar a operação.

Relacionadas