Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kwalifikator restrict

Ostatnio zmodyfikowano 2017-10-24 21:55
Autor Wiadomość
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?
P-166054
pekfos
» 2017-10-24 20:08:59
C/C++
int f( int * pa, int * pb )
{
    int i = * pa; // wczytaj z pamięci
    * pb += 123;
    return i + * pa; // i * 2?
}
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.
P-166055
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?
P-166061
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
P-166062
rEAX64
Temat założony przez niniejszego użytkownika
» 2017-10-24 21:55:20
Rzeczywiście :-)
P-166064
« 1 »
  Strona 1 z 1