restrict 的无用案例

Useless case for restrict

所以我的理解是,C99 标准规定指向不同类型的指针不应使用别名(即指向同一内存)。 restrict 关键字向编译器保证两个特定变量(相同类型?)不在同一内存槽中。

因此,以下函数是否不会从 restrict 关键字中获利?

void sphere_intersect(float* t, const sphere* s, const ray* r); 

但是,像这样的函数会:

void vector_add(vector* v, const vector* u);

类似

的函数
void sphere_intersect(float* t, const sphere* s, const ray* r);
如果类型 sphere and/or ray 包含任何 float 字段,

可以从添加限制中获益。缺少 restrict,编译器必须假定 t 可能与 sr 指向的对象中的任何 float 字段互为别名。因此,对 *t 的任何写入都可能会修改此类字段,这意味着编译器无法将所述字段的值保存在寄存器中供以后重用,而是必须重新加载它。