ExpertiDict

C · Avançado · Inglês · Técnico

restrict

/ɹɪˈstɹɪkt/palavra-chave

Qualificador de ponteiro, introduzido em C99, que promete ao compilador que o objeto apontado só é acessado por aquele ponteiro durante seu escopo. Permite otimizações mais agressivas.

Onde usar

Aparece nas assinaturas de memcpy e strcpy, o que explica por que origem e destino não podem se sobrepor. Se a promessa for quebrada, o resultado é comportamento indefinido.

Em código

void soma(int *restrict d, int *restrict s) {
  for (int i = 0; i < 4; i++)
    d[i] += s[i];
}

Exemplos

Mark both pointers restrict so the compiler can vectorize the loop.

Marque os dois ponteiros como restrict para o compilador vetorizar o laço.

Passing overlapping buffers to a restrict function is undefined.

Passar buffers sobrepostos para uma função restrict é indefinido.

Cuidado

Tratar restrict como verificação do compilador: é promessa sua, e com áreas sobrepostas o certo é memmove.

Veja também

Todos os termos de C