Kwalifikator restrict
Ostatnio zmodyfikowano 2017-10-24 21:55
rEAX64 Temat założony przez niniejszego użytkownika |
Kwalifikator restrict » 2017-10-24 19:49:05 Co to znaczy że wskaźnik ma wyłączny dostęp do określonego bloku pamięci? Szczerze nie za bardzo rozumiem o co chodzi z kwalifikatorem restrict. To jest cytat z książki. Kwalifikator restrict został wprowadzony również z uwagi na optymalizację. Wskaźnik oznaczony tym słowem ma wyłączny dostep do określonego bloku pamięci.
|
Doczytałem też z innej strony że When we use restrict with a pointer ptr, it tells the compiler that ptr is the only way to access the object pointed by it and compiler doesn’t need to add any additional checks. "Kiedy używamy restrict we wskaźniku ptr, to mówimy kompilatorowi że ptr jest jedyną drogą mającą dostęp do wskazywanego obiektu?"
|
Ktoś coś jest w stanie łopatologicznie na chłopski rozum to rozjaśnić, o ile się da? |
|
pekfos |
» 2017-10-24 20:08:59 int f( int * pa, int * pb ) { int i = * pa; * pb += 123; return i + * pa; } Bez restrict kompilator nie może założyć, że modyfikacja *pb nie zmodyfikowała wartości pod *pa. Tak się stanie, kiedy wywołasz f(&x, &x), co jest poprawne. Z restrict takie wywołanie będzie miało niezdefiniowane zachowanie, bo podałeś kompilatorowi informację, że taki przypadek jest niemożliwy. |
|
rEAX64 Temat założony przez niniejszego użytkownika |
» 2017-10-24 21:12:34 Z restrict takie wywołanie będzie miało niezdefiniowane zachowanie, bo podałeś kompilatorowi informację, że taki przypadek jest niemożliwy.
|
Pekfos proszę, pomóż jeszcze... przepisałem sobie tą funkcję skompilowałem i ta funkcja zwraca mi takie same wyniki zarówno bez słowa restrict jak i ze słowem restrict. Ja nadal nie rozumiem... w czym tu jest różnica między tym - int * pa , a tym int * restrict pa Się zastanawiam gdzie tu jest właśnie to niezdefiniowane zachowanie? |
|
pekfos |
» 2017-10-24 21:36:58 Restrict daje tu możliwość optymalizacji, więc nie oczekuj różnic przy wyłączonych optymalizacjach. >gcc a.c >a 323 >gcc a.c -O3 >a 200 |
|
rEAX64 Temat założony przez niniejszego użytkownika |
» 2017-10-24 21:55:20 Rzeczywiście :-)
|
|
« 1 » |