0

我正在網上評委之一提交我的代碼。我的程序被接受。 但是,我的程序的某些部分需要最多10,000個元素的長整型數組。大小在運行時由裁判輸入。 我使用動態分配內存:替代動態分配內存?

int *array = new int[size]; 

但在運行時該吃大量的時間。我的執行時間很糟糕,導致排名不佳。 是否有任何考慮到程序的要求,更快地替代動態分配

我不知道爲什麼,但靜態創建數組使用

int array[10000]; 

給了我一個「運行時錯誤(訪問衝突)」

PS(我認爲這是一個壞主意) :我只是一個初學者。

+1

確定分配是什麼佔用了大部分的執行時間? – mclaassen 2014-09-12 19:16:34

+0

您是否測量了整個程序的時間和分配時間(new int [size])? – Yotam 2014-09-12 19:19:54

+0

如果我靜態分配內存,我的程序成功處理了10個測試用例,執行時間爲0.015秒,但內存分配使它成爲0.125秒。 – lazygeek 2014-09-12 19:21:45

回答

0

內存分配是一個相對便宜的操作。除非你連續數十億次這樣做,否則這幾乎不是你的性能瓶頸所在。當然,除非你分配太多的內存,它需要不斷地交換到磁盤,但我懷疑競賽的應用程序需要使用那麼多的內存。

0

對於現代計算機來說,10000長整數實際上沒有太多內存。你應該可以在任何個人電腦上爲milisecons分配更多的時間。

但是,靜態分配時得到的運行時錯誤意味着,您的程序可能嘗試使用超過10000個數組值。因此,法官可能會在動態分配中分配超過10000個大小的數組?

嘗試製作大尺寸的靜態數組(記住,暢想多頭只有幾百兆),並檢查是否運行時錯誤仍然出現