Talk:Restrict
This is the talk page for discussing improvements to the Restrict article. This is not a forum for general discussion of the article's subject. |
Article policies
|
Find sources: Google (books · news · scholar · free images · WP refs) · FENS · JSTOR · TWL |
Archives: 1Auto-archiving period: 90 days |
This article is rated Start-class on Wikipedia's content assessment scale. It is of interest to the following WikiProjects: | |||||||||||
|
Why restrict on all pointers?
[edit]I have tried compiling and disassembling the example on my own, and it is true that you have to use restrict on at least ptrA and val to gain the optimization. But I can not figure out why. Why is using restrict on the val pointer only not enough?
Is it possible that the compiler (may be compiler dependent?) assumes that the restriction only implies on other pointers that are also restricted? If so, this might be a good add to the article.
Using GCC 4.4.5 I can confirm this behavior: the restrict optimization is only applied when reading a restrict pointer which is already in a register, and no non-restrict pointer made a modification to the object the non-restrict pointer refers to.
Alternative working example
[edit]typedef void Cb();
int foo(const int * a, Cb cb) {
int x = *a;
cb();
return x - *a;
}
Give it a workout using clang (GCC optimization seems broken). — Preceding unsigned comment added by 94.220.161.15 (talk) 17:39, 4 December 2014 (UTC)
"restrict" optional in C++ [but not in C] an important difference?
[edit]I understand the C restrict
keyword (not available in C++) is to indicate that accesses through pointers "do not alias", to gain speed.
I also understand in C++, there are e.g. __restrict or __restrict__, that is, no way is standardized, so does that mean [portable] C++ can't be as fast?
I also understand that any "restrict-way" in C++ is optional; could have no effect (in other compilers (only?), with different syntax), but couldn't you say the same for C? It's a keyword, and the compiler may not give a syntax error, but I guess it could just parse it and then ignore.
Is there anything in C++ that mitigates missing or non-standard restrict? That is, since you have more type information, the compiler could in theory realize (as with Fortran) that no aliasing can happen? comp.arch (talk) 13:24, 2 June 2016 (UTC)
does "restrict" imply "const"?
[edit]I wonder whether any foo *restrict ptr
is equivalent to foo *const restrict ptr
: Obviously if you modify ptr
, it may access another data item than ptr
initially pointed to. So does restrict
imply const
, or should it be common practice to combine both? If not, any example where a valid use of restrict
also modifies the pointer? Uhw (talk) 11:49, 15 December 2016 (UTC)