restrict
устанавливает для вызывающей стороны требование, чтобы аргументы указателя на эту функцию не могли иметь псевдоним.То есть указатели не должны указывать на один и тот же объект.
Хотя это имеет очевидный смысл для pthread_create
, это более важно для такой функции, как memcpy
.
void * memcpy(void *restrict s1, const void *restrict s2, size_t n);
memcpy
требует, чтобы входные буферы не перекрывались.Обычно он реализуется как простой итерационный цикл вперед или назад, поэтому, если буферы do перекрываются, это может привести к копированию уже скопированных данных.