int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);
Я хотел бы знать, что означает ограничение?
int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);
Я хотел бы знать, что означает ограничение?
Это что-то введенное в C99, которое позволяет компилятору знать, что переданный указатель не указывает на то же место, что и любые другие указатели в аргументах. Если вы дадите эту подсказку компилятору, он сможет выполнить более агрессивную оптимизацию без нарушения кода.
В качестве примера рассмотрим эту функцию:
int add(int *a, int *b) {
return *a + *b;
}
Очевидно, он складывает два числа из указателей. Мы можем использовать это так, если хотим:
// includes excluded for brevity
int main(int argc, char **argv) {
int number=4;
printf("%d\n", add(&number, &number));
return 0;
}
Очевидно, он выдаст 8; он добавляет 4 к себе. Однако, если мы добавим restrict
к add
вот так:
int add(int *restrict a, int *restrict b) {
return *a + *b;
}
Тогда предыдущий main
теперь недействителен; он передает &number
в качестве обоих аргументов. Однако вы можете передать два указателя, указывающих на разные места.
int main(int argc, char **argv) {
int numberA=4;
int numberB=4;
printf("%d\n", add(&numberA, &numberB));
return 0;
}
memmove()
- person ninjalj; 14.07.2011