2013-07-30 18 views
9

Obecnie mam TCube tablicęCzy tablica może być za duża?

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

Obecnie wykorzystując je jako mapa więc może masz 30 kostek szeroki, wysoki 20 kostek, czyniąc wielki siatkę. Ale 1000 kostek nie wystarcza do tego, czego potrzebuję, potrzebuję więcej jak 10 000 kostek.

Czy posiadanie tablicy o takim rozmiarze spowoduje problemy w dół drogi? Jakieś inne opcje?

+1

Nie ma problemu, chyba że masz za mało pamięci. – Sergio

+0

Tak więc w tym przypadku 1000 kostek jest tworzonych w czasie wykonywania, więc kiedy je utworzę, to przy użyciu większej ilości pamięci? lub definiując tablicę, wszystko gotowe do utworzenia kostki i właśnie edytuję pamięć, kiedy robię CreateCube [i]: = tcube.Create (self); –

Odpowiedz

16

Istnieją dwie sytuacje, w których kolumny są duże problemy:

  1. Układ jest tak duży, że nie będzie pasować do ciągłego bloku pamięci. Jeśli tablica zawiera odniesienia, a nie wartości, to możesz mieć dostateczną pamięć dla tablicy, ale za mało pamięci dla obiektów, do których się odwołujesz.
  2. Tablica jest zadeklarowana jako zmienna lokalna i prowadzi do przepełnienia stosu. Sposób uniknięcia tego problemu polega na przeniesieniu tablicy na stertę. W Delphi najczystszym sposobem na zrobienie tego jest uczynienie tablicy tablicą dynamiczną. Nawet jeśli znasz wymiary podczas kompilacji, możesz użyć tablicy dynamicznej, aby przenieść magazyn ze stosu i na stertę.
5

Tablica może być tak duża, jak pozwala na to pamięć. Ale jeśli jest to zmienna lokalna lub przekazujesz ją pewnej metodzie według wartości, to uważaj, możesz łatwo wydostać się ze stosu.

2

Wybór odpowiedniej struktury danych to coś, co mogę tylko ci doradzić. Wiele z tego będzie zależeć od tego, w jaki sposób zostanie wypełniona tablica. Szereg rzadkich może dobrze działać, jeśli tablica jest duża, ale słabo zaludniona.

Osobiście zakoduję niestandardową klasę list, która będzie zawierała instancje TCube. Ma to kilka zalet w stosunku do tablicy. Po pierwsze, będzie dynamicznie zużywać pamięć. Po drugie, możesz dodać dodatkowe metody do tej klasy, aby pasowały do ​​twoich aplikacji.

Powiązane problemy