Linux x86_64Memória#25
mremap
Redimensiona e/ou move um mapeamento de memória existente.
Descrição
Permite crescer (ou encolher) um mapeamento sem copiar manualmente os dados — se necessário mover para um novo endereço (com MREMAP_MAYMOVE), o kernel atualiza as tabelas de página em vez de copiar bytes.
Header:
sys/mman.hman 2Assinatura
void * mremap(
void * old_address,
size_t old_size,
size_t new_size,
int flags,
void * new_address
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| old_address | void * | Início do mapeamento existente. |
| old_size | size_t | Tamanho atual do mapeamento. |
| new_size | size_t | Novo tamanho desejado. |
| flags | int | MREMAP_MAYMOVE, MREMAP_FIXED. |
| new_address | void * | Endereço de destino, usado apenas com MREMAP_FIXED. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | old_addressvoid * |
| rsi | argumento 2 | old_sizesize_t |
| rdx | argumento 3 | new_sizesize_t |
| r10 | argumento 4 | flagsint |
| r8 | argumento 5 | new_addressvoid * |
Valor de retorno
Endereço do mapeamento (possivelmente novo) em sucesso; MAP_FAILED em erro, com errno definido.
Códigos de erro (errno)
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.