2010-06-10 33 views
5

是否在64位x86 linux平台上使用带g ++/Intel的自动阵列相关的cpu /内存开销很大?C99可变长度自动阵列性能

int function(int N) { 
    double array[N]; 
  • 相比分配前手阵列

    开销相比相对于使用malloc

使用新

  • 开销(假定函数被调用多次)

  • 开销

    N的范围可以是粗略地从1kb到16kb,堆栈溢出不是问题。

  • +2

    你说的自动数组是什么意思? – AraK 2010-06-10 23:01:56

    +0

    相比,开销是多少? – sth 2010-06-10 23:03:37

    +3

    我认为他正在讨论在C99版本的语言中添加到C中的变长数组。这是正确的aaa? – 2010-06-10 23:03:50

    回答

    6

    VLA和静态大小数组之间的性能差异应该可以忽略不计。你可能需要一些额外的指令来计算堆栈的增长量,但在任何真正的程序中都应该是噪声。

    嗯,根据进一步的想法,也可能会有一些开销,取决于局部变量如何放在内存中以及是否有多个VLA。

    考虑一下你有当地人的情况(并且假设他们按照他们指定的顺序放在内存中)。

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

    现在,每当你需要访问arr2,代码需要计算arr2相对的位置,您的基本指针。

    +0

    谢谢。这是我的直觉,只是想加倍肯定。幸运的是,我只需要担心单个VLA阵列 – Anycorn 2010-06-10 23:16:29

    0
    • 评论汇编输出
    • 简介吧,为你的应用
    • 检查您的内存使用情况