C99可变长度自动阵列性能

时间:2010-06-10 22:58:33

标签: c performance

在64位x86 linux平台上使用带有g ++ / Intel的自动数组是否会产生显着的CPU /内存开销?

int function(int N) {
    double array[N];
  • 与先前分配数组相比(假设多次调用函数)开销

  • 与使用新

    相比,
  • 开销 与使用malloc

  • 相比,
  • 开销

N的范围大致可以从1kb到16kb,堆栈超限不是问题。

3 个答案:

答案 0 :(得分:6)

VLA和静态大小的阵列之间的性能差异应该可以忽略不计。您可能需要一些额外的指令来计算堆栈的增长量,但这应该是任何实际程序中的噪声。

嗯,进一步考虑,根据局部变量在内存中的布局以及是否存在多个VLA,也可能会有一些开销。

考虑你有本地人的情况(并假设他们按照指定的顺序放入内存)。

int x;
int arr1[n];
int arr2[n];

现在,只要您需要访问arr2,代码就需要计算arr2相对于基指针的位置。

答案 1 :(得分:5)

答案 2 :(得分:0)

  • 查看装配输出
  • 为您的应用配置文件
  • 检查您的内存使用情况