c/c++语言开发共享使用数组限制?

有没有办法告诉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; .... } 

通过使用restrict我承诺我不会为range1和range2设置别名但是如何为我的函数内部声明的数组做同样的事情?

    虽然Jeff的答案是正确的,即你总是可以指向分配的数组,但事实是编译器在编译时知道tmpvalues不会被别名,因为变量被声明为实际数组,而不是指针。 别名数组的唯一机会是声明指向它的指针,所以如果你不这样做,就没有必要将它声明为restrict 。 如果tmpvalues是函数中唯一的变量,则更明显。

    如果将指针传递给另一个函数可能会出现问题,那么您应该说明接收的指针是否受限制。

    我遇到的与此主题相关的文档包括C99 :

    设D是普通标识符的声明,它提供了一种将对象P指定为类型T的限制限定指针的方法。

    请注意,它仅适用于指针。

    TI的其他文档使用restrict关键字提供了一些性能调优提示。 除了所有提示之外,第3.3节提供了可以应用此类型限定符的示例,而不是。 在第16页的中间查找x数组声明,它声明它没有声明指针,因此不能restrict

    你为什么不能做以下事情? 您不是通过该变量访问与tmpvalues关联的数据,因此在代码的计算密集型部分中使用restrict指针是有效的。

     #include  #include  int heavy_calcs(int n, float* restrict range1, float* restrict range2) { if (n>1000) return 1; float tmpvalues[1000] = {0}; { float * restrict ptv = tmpvalues; for (int i=0; i1) ? atoi(argv[1]) : 1000; float * r1 = (float*)malloc(n*sizeof(float)); float * r2 = (float*)malloc(n*sizeof(float)); int rc = heavy_calcs(n,r1,r2); free(r1); free(r2); return rc; } 

    我通过英特尔15编译器运行它,它可以很好地矢量化循环。 当然,与我假设的相比,这个循环是微不足道的,所以你的里程可能会有所不同。

      以上就是c/c++开发分享使用数组限制?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/560520.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐