【问题标题】:What is the syntax for using the restrict keyword for a 2d array function parameter?对二维数组函数参数使用限制关键字的语法是什么?
【发布时间】:2020-05-31 05:47:35
【问题描述】:

我在主函数中声明了一个数组: float A[n][n];

我的目标是将其传递给带有 restrict 关键字的函数: void func(int n, float restrict A[][n])

我尝试了上面的语法,但没有得到预期的运行时间优化。我还看到了一维数组的这种语法: void func(int n, float A[restrict])

【问题讨论】:

  • 运行时间不需要有任何变化。你为什么期望有任何?
  • 我预计运行时间会减少,因为我读到编译器会对指针别名执行额外检查,包括函数参数中的数组引用。通过告诉编译器不要进行这些检查,我预计运行时间会减少。
  • 你只有 一个 指针参数。限制意味着它不能指向您可以在函数中使用的任何其他 float array,或者您使用的任何其他外部 float pointer 不能指向数组元素。如果甚至没有使用这样的指针,就不可能有任何优化效果。
  • 谢谢。但实际上我还有两个浮点数组被传递给 func,所以我认为它可能适用于此。

标签: c function multidimensional-array parameters restrict-qualifier


【解决方案1】:

指针可以被限制。以下所有形式都是等效的:

void func(int n, float A[restrict n][n]);
void func(int n, float A[restrict][n]);
void func(int n, float (* restrict A)[n]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多