C · Avançado · Inglês · Técnico
restrict
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.