Насколько я понимаю, стандарт C99 предписывает, чтобы указатели на разные типы не имели псевдонимов (т.е. указывали на одну и ту же память). Ключевое слово restrict
гарантирует компилятору, что две определенные переменные (одного и того же типа?) не находятся в одном и том же слоте памяти.
Таким образом, верно ли, что следующая функция не принесет пользы от ключевого слова restrict
?
void sphere_intersect(float* t, const sphere* s, const ray* r);
Но такая функция будет:
void vector_add(vector* v, const vector* u);
restrict
ed. См., например, strcpy. - person Unmanned Player   schedule 30.08.2017restrict
— сообщить компилятору, что указатели разные и не должны иметь псевдонимов. Неважно, какие типы используются. - person Unmanned Player   schedule 30.08.2017-fstrict-aliasing
), что указатели на разные типы не имеют псевдонима? Поэтому ключевое слово limited имеет смысл только для того, чтобы помочь компилятору с одинаковыми типами. - person Daniel Lovasko   schedule 30.08.2017restrict
помогает компилятору узнать, что отдельные указатели указывают на отдельные данные. - person Jonathan Leffler   schedule 30.08.2017int
, а затем читаетеfloat
в том же месте. - person curiousguy   schedule 06.09.2017