pthread_create中restrict的含义是什么

pthread_create中restrict的含义是什么,c,linux,pthreads,C,Linux,Pthreads,我正在看pthread_创建手册页面 int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg); 此函数签名中“限制”的含义是什么?。它的目的是什么?基本上回答了你的问题 它基本上告诉编译器,只有这个指针或从它派生的指针(指针+1)才能访问指针所

我正在看pthread_创建手册页面

int pthread_create(pthread_t *restrict thread,
          const pthread_attr_t *restrict attr,
          void *(*start_routine)(void*), void *restrict arg);
此函数签名中“限制”的含义是什么?。它的目的是什么?

基本上回答了你的问题


它基本上告诉编译器,只有这个指针或从它派生的指针(指针+1)才能访问指针所指向的对象。

restrict
对调用方提出了一个要求,该函数的指针参数不能别名。也就是说,指针不能指向同一个对象

虽然这对于
pthread\u create
来说很明显,但对于
memcpy
这样的函数来说更为重要

void * memcpy(void *restrict s1, const void *restrict s2, size_t n);

memcpy
要求输入缓冲区不重叠。它通常实现为一个简单的正向或反向迭代循环,因此如果缓冲区重叠,它可能会复制已经复制的数据

你退房了吗?告诉我我的理解是否正确。第一个参数指向某个内存位置范围,比如从a到d。所以,同一函数中的其他参数不应该指向a到d之间的任何位置,对吗?正如我们在memcpy中看到的那样?是的,这是正确的。这两个参数不应该指向同一个区域,也不应该指向从它们派生的任何指针。谢谢Jay,但是当我编写自己的函数并使用'restrict'关键字时,这有什么关系呢?。困惑。编译器使用它进行优化。它基本上为别名分析提供了提示。