pthread_create中restrict的含义是什么
我正在看pthread_创建手册页面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)才能访问指针所
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'关键字时,这有什么关系呢?。困惑。编译器使用它进行优化。它基本上为别名分析提供了提示。