![]() |
Re: Arbeiten mit TList
Zitat:
|
Re: Arbeiten mit TList
Zitat:
Zitat:
|
Re: Arbeiten mit TList
Zitat:
|
Re: Arbeiten mit TList
Zitat:
|
Re: Arbeiten mit TList
Zitat:
|
Re: Arbeiten mit TList
Meine Intention hierbei war einfach, dass bei Add nur einmal neuer Speicher für den neuen Punkt angefordert wird. Beim Arbeiten mit dynamischen Arrays kann es meines Wissens nach oft sein, dass das komplette Array im Speicher verschoben wird. Wenn ich einige hundert Punkte habe und beim hinzufügen immer ein setlength mache, finde ich das nicht ganz optimal.
Gut das gleiche hätte auch eine verkette Liste getan, aber die hätte ich komplett implementieren müssen... So nun hab ich mir auch mal ein wenig Quelltext von TList angesehen. @littleDave TPointerList ist so definiert:
Delphi-Quellcode:
Also wird gleich für die maximale Länge der Liste Speicher für die Pointer reserviert und dieser auch nicht zur Laufzeit verändert.
MaxListSize = Maxint div 16;
TPointerList = array[0..MaxListSize - 1] of Pointer; Beim Löschen werden nicht alle folgenden Elemente zurückgeschoben, sondern nur der letzte gültige Pointer an die leere Stelle kopiert. |
Re: Arbeiten mit TList
Zitat:
Gerd |
Re: Arbeiten mit TList
TPointerList ist nur ein Dummy-Typ. In TList wird ja einfach PPointerList verwendet. Der Compiler weiß dann, dass der Speicher, auf den der Pointer zeigt, ein array ist. Somit kann man direkt PPointerList[i] aufrufen und der Compiler macht das restliche. Man könnte TPointerList auch definieren als array[0..0] of pointer. Es wird das gleiche rauskommen. Der Typ ist nur dafür da, damit man die eckigen Klammern benutzen kann.
Zitat:
Zitat:
Delphi-Quellcode:
procedure TList.Delete(Index: Integer);
begin { ... } if Index < FCount then // Mit dem Move-Befehl werden alle Pointer, die nach index kommen, // um eine Position (4 Byte bei 32Bit-Systemen) nach vorne geschoben System.Move(FList^[Index + 1], FList^[Index], (FCount - Index) * SizeOf(Pointer)); { ... } end; |
Re: Arbeiten mit TList
Stimmt auch wieder ...
Nun ja, auf jeden Fall hab ich bei diesem Thread einiges gelernt! :-D Danke dafür!!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz