2010-06-10 35 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
    • 評論彙編輸出
    • 簡介吧,爲你的應用
    • 檢查您的內存使用情況