Voltar à lista
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 2

Assinatura

void * mremap(
    void * old_address,
    size_t old_size,
    size_t new_size,
    int flags,
    void * new_address
);

Parâmetros

ParâmetroTipoDescrição
old_addressvoid *Início do mapeamento existente.
old_sizesize_tTamanho atual do mapeamento.
new_sizesize_tNovo tamanho desejado.
flagsintMREMAP_MAYMOVE, MREMAP_FIXED.
new_addressvoid *Endereço de destino, usado apenas com MREMAP_FIXED.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1old_addressvoid *
rsiargumento 2old_sizesize_t
rdxargumento 3new_sizesize_t
r10argumento 4flagsint
r8argumento 5new_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.

Relacionadas