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 2Atençã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âmetro | Tipo | Descrição |
|---|---|---|
| addr | void * | Início da região, alinhado ao tamanho de página. |
| length | size_t | Tamanho da região. |
| advice | int | MADV_NORMAL, SEQUENTIAL, RANDOM, WILLNEED, DONTNEED, FREE, HUGEPAGE, entre outras. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | addrvoid * |
| rsi | argumento 2 | lengthsize_t |
| rdx | argumento 3 | adviceint |
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.