[英]C/C++ Allocation
給出一個數字X並將X個數字讀入一維數組,以下哪種方式最好(執行時間最快)?
請注意 X 是 1 到 1000000 之間的數字
scanf("%d", &x);
int array[x];
//continue reading X numbers into array
或者
scanf("%d", &x);
int array[1000000];
//continue reading X ...
或者
scanf("%d", &x);
int * array = malloc(x*sizeof(int));
//same as above
free(array);
還是C++動態分配方法?
注意 1:我是從手機上發布的,我希望上面代碼的格式沒問題,如果沒有,我會請人(<3)編輯它,因為從手機中縮進代碼很痛苦。
注 2:我如何測試我上面提出的問題?
您將收到此代碼的編譯錯誤:
scanf("%d", &x);
int array[x];
在這種情況下,應該在編譯時知道 x。
使用int array[1000000]
您在堆棧上分配內存,而不是在堆中,因此與malloc
或new operator
相比,這是根本區別。 它會更快,因為它實際上只需要一個 CPU 命令來修改堆棧指針。
如果比較malloc
和new
, malloc
會更快,因為 new 最終會在內部調用malloc
。 但是性能提升會很小,用這種方式優化你的c++程序是不值得的,只需要在需要分配動態內存時使用c++。
由於出現scanf
(並且評論假設還有一百萬次調用scanf
)關於內存分配以及“哪個最快?”的任何問題。 可以普遍回答:“是”(讀作:無關緊要)。
雖然自動存儲(“堆棧分配”)通常比 freestore 快,但與您將在scanf
花費的時間相比,它完全微不足道。 話雖如此,它通常(不一定,但通常)是緩慢的動態釋放,而不是分配。
關於該代碼,一般需要注意幾點:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.