2013-07-30 51 views
9

目前,我有一個TCube陣列陣列可能太大嗎?

CreateCube : array[1..1000] of tcube; 

目前使用它們作爲一個地圖,這樣你可能有30個立方體寬,20個方塊高,從而使一個大網格。但是,1000立方體對於我所需要的並不足夠,我需要更多像10,000個立方體。

這樣大小的數組是否會導致問題出現?任何其他的選擇嗎?

+1

不會有問題,除非你沒有足夠的內存 – Sergio

+0

所以在這種情況下,1000個立方體是在運行時創建的,所以當我創建它們時,它會使用更多內存?或通過定義數組,它的所有就緒創建立方體,我只是編輯內存時,我CreateCube [我]:= tcube.Create(self); –

回答

16

在有些情況下大的陣列是有問題的兩種主要情況:

  1. 陣列是如此之大,這將不適合的存儲器中的連續塊。如果數組保存引用而不是值,那麼您可能擁有足夠的內存用於數組,但對於所引用的對象而言內存不足。
  2. 該數組被聲明爲局部變量並導致堆棧溢出。避免這個問題的方法是將數組移動到堆上。在Delphi中,最簡單的方法是使數組成爲一個動態數組。即使您在編譯時知道尺寸,也可以使用動態數組將存儲從堆棧移動到堆上。
5

數組可以與內存允許的一樣大。但是,如果它是一個局部變量,或者如果您通過值將傳遞給某個方法,那麼請注意,您可以輕鬆地擺脫堆棧。

2

選擇正確的數據結構是我只能建議你的。它的很大一部分將取決於數組將如何填充。如果數組很大但只是輕度填充,則稀疏數組很可能會工作。

就我個人而言,我會編寫一個自定義列表類來包含TCube實例。與數組相比,這有幾個優點。首先,它會動態地消耗內存。其次,您可以添加其他方法來適應您的應用程序。