我的 macOS 音频应用程序使用 for 循环添加两个 float 组。当 size
很大时,是否有更有效的方法?
int size = 5;
float array1[size] = {0.0, 0.1, 0.2, 0.3, 0.4};
float array2[size] = {0.5, 0.6, 0.7, 0.8, 0.9};
float sum[size];
for (int i = 0; i < size; i ++)
{
sum[i] = array1[i] + array2[i];
}
最佳答案
你可以做的最重要的技巧:如果这些数组实际上是指针并且你将它们传递给一个函数,一定要限制-限定和指针,如果它确实应该指向一个独立于 2 的数组:
void do_sum(size_t size,
float * restrict sum,
float * array1,
float * array2)
或带有尺寸提示
void do_sum(size_t size,
float sum[restrict static size],
float array1[static size],
float array2[static size])
这将使编译器能够生成更高效的代码,因为它保证 array1[n]
和 array2[n]
都不能访问与sum[k]
用于函数中使用的任何 n
或 k
在 Godbolt 上亲自体验差异:with restrict和 without
关于c - 在 C 中添加两个 float 组的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58152779/