有没有办法告诉 C99 编译器我访问给定数组的唯一方法是使用 myarray[index] ?
说这样的话:
int heavy_calcualtions(float* restrict range1, float* restrict range2)
{
float __I promise I won't alias this__ tmpvalues[1000] = {0};
....
heavy calculations using range1, range2 and tmpvalues;
....
}
通过使用限制,我承诺不会为 range1 和 range2 起别名,但是如何对函数内声明的数组执行相同的操作?
尽管 Jeff 的答案是正确的,即您始终可以创建指向已分配数组的指针,但事实是编译器knows在编译时,tmpvalues 不会被别名,因为该变量被声明为实际数组,而不是指针。为数组添加别名的唯一机会是声明指向它的指针,因此如果不这样做,则无需将其声明为restrict
。如果tmpvalues
是函数中唯一的变量。
如果您将指针传递给另一个函数,则可能会出现问题,那么您应该在那里声明接收到的指针是否受到限制。
我遇到的与该主题相关的文档包括C99 http://c0x.coding-guidelines.com/6.7.3.1.html:
设 D 是一个普通标识符的声明,它提供了一种方法
将对象 P 指定为类型 T 的限制限定指针。
请注意,它仅适用于指针。
这份其他文件 http://processors.wiki.ti.com/images/f/ff/Bartley%3DWiki_1.1%3DPerformance_Tuning_with_the_RESTRICT_Keyword.pdfTI 提供了一些性能调整提示,使用restrict
关键词。除了所有提示之外,第 3.3 节还提供了何时可以应用此类型限定符以及何时不可以的示例。寻找x
第 16 页中间的数组声明,它声明它没有声明指针,因此不能restrict
-合格的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)