2013-12-20 124 views
-2

我知道從堆棧分配內存是速度快,但訪問變量這是更快 例如當:哪個更快訪問堆棧或堆?

void fn1() 
{ 
    int *p=new int[50]; 
    for(int i=0;i<50;i++) 
     p+i=i*i; 
} 

void fn2() 
{ 
    int p[50]; 
    for(int i=0;i<50;i++) 
     p[i]=i*i; 
} 

其中上述功能將被執行更快?

我問它,因爲我在C創建一個遊戲引擎++,我有頻繁的繪製調用這是相當小的只是矩陣涉及轉型,旋轉等使該分配將最有用我的目的

+3

你是指堆棧還是堆? –

+0

你爲什麼不測試它? – codeling

+1

** MEASURE ** so so如此如此 –

回答

5

雖然標準沒有說明任何內容,但在具有統一內存結構的計算機上應該沒有區別。由於CPU中的緩存效應,您可能會發現訪存時間存在差異,因爲堆棧中分配的數組012的數據與您的函數的其他局部變量的數據更接近(就地址而言)(除非優化器選擇將這些當地人放在寄存器中),但整體訪問時間應該是相同的。

您將要動態分配內存的最大打擊是撥打mallocfree

0

你」我們會通過new的調用來分配陣列,但之後它們將具有相同的性能特徵。

0

如果你考慮分配,

第二個函數執行得比第一個快。當您在堆棧中分配內存時,指令將被嵌入,以便它將移動堆棧指針,幾乎它將成爲大多數體系結構中的單個指令。

1

自從我鑽研C以來,已經有一段時間了......索引到數組中應該是一種快速操作。作爲一個猜測,我會說他們將會是一樣的。在第一個函數中,您正在遞增指針......在第二個函數中,您將索引到數組中,這與增加指針到達相應數組元素的內存位置幾乎相同。