pthread_create中restrict的含义是什么?

5
我正在查看pthread_create手册页面。
int pthread_create(pthread_t *restrict thread,
          const pthread_attr_t *restrict attr,
          void *(*start_routine)(void*), void *restrict arg);

这个函数签名中的'restrict'是什么意思?它的目的是什么?

1
你有没有看过这个?链接 - Dan Fego
2个回答

3

restrict要求调用者不得为该函数的指针参数设置别名。也就是说,指针不能指向同一个对象。

虽然这对于pthread_create来说是显而易见的,但对于memcpy这样的函数来说更为重要。

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

memcpy 需要保证输入缓冲区不重叠。它通常是作为简单的前向或后向迭代循环实现的,因此如果缓冲区 重叠,它可能会复制已经复制的数据。


1
请告诉我我的理解是否正确。第一个参数指向某个内存位置范围,比如从a到d。因此,同一函数中的其他参数不应该指向a到d之间的任何位置,就像我们在memcpy中看到的那样,对吗? - Whoami
1
是的,没错。这两个参数不应该指向同一区域,也不应该有任何从它们派生出来的指针。 - Jay Conrod
谢谢Jay,但是当我编写自己的函数并使用'restrict'关键字时,这有什么影响吗?感到困惑。 - Whoami
它被编译器用于优化。它基本上为别名分析提供了提示。 - Jay Conrod

1

这个基本上回答了你的问题。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接