| Autor |
Beitrag |
mars
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Fr 21.02.03 16:52
Ich habe hier auf dem Forum keinen Beitrag dazu gefunden, deshalb frage ich mal:
Auch nach der Lektüre des sehr guten Tutorials bezüglich Arrays von Peter Lustig ist mir noch nicht ganz klar, welche Vorteile beziehungsweise Nachteile dynamische Arrays gegenüber statischen haben. Natürlich ist es einfacher mit statischen zu arbeiten, da man von anfang an die Grösse kennt. Auch entfallen jegliche Speicherüberlegungen und irgendwo habe ich gelesen, dass sich ein statisches Array besser zum Sortieren (genau das, was ich mit diesem Array vorhabe) eignet, da die Datensätze physisch nebeneinander liegen. Dagegen sehe ich natürlich den Vorteil der einfachen Erweiterung beziehungsweise Flexibilität was die Grösse angeht bei dynamischer Arrays. Meine Frage aber lautet nun: Müsstet ihr die Effizienz eines Programms beurteilen, würdet ihr statische präferieren? Sieht ein Programm mit statischen Arrays einfach schöner aus? Gibts Performance-Unterschiede? Weshalb sollte ich in meinem Programm statische und nicht dynamische Arrays nutzen?
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Fr 21.02.03 19:09
Titel: Dynamische Arrays
Hi,
über Vor- und Nachteile läßt sich bekanntlich nicht streiten. Ich arbeitete grundsätzlich nur mit dyn. Arrays - das Handling ist mit dem von statischen indentisch, bringt aber einige Vorteile. Interessant wird ja erst, wenn das Array mehrdimensional ist. Die Performance ist mit dem Zeitalter heutiger PCs (>1 GHz, >256 MB RAM) eh untergeordnet. Und von Quelltext siehts besser aus  Dynamische Arrays lassen sich sogar besser sortieren, da wird nur ein Zeiger verändert, aber keine Daten im Speicher herumgeschoben.
Dyn. Arr. sind flexibler was die Größe angeht; jedesmal den Quelltext anpassen, weil wieder was dazu kommt ist etwas umständlich.
Tip: Lange Strings sind auch nichts weiter als dyn. Arrays.
mfg
MSCH
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Fr 21.02.03 19:09
| mars hat folgendes geschrieben: | | Auch entfallen jegliche Speicherüberlegungen und irgendwo habe ich gelesen, dass sich ein statisches Array besser zum Sortieren (genau das, was ich mit diesem Array vorhabe) eignet, da die Datensätze physisch nebeneinander liegen. |
Wo hast du denn den Unsinn her? Bei einem dynamisches Array sind ebenfalls alle Elemente physikalisch hintereinander abgelegt.
_________________ Ist Zeit wirklich Geld?
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Fr 21.02.03 20:16
| AndyB hat folgendes geschrieben: | | mars hat folgendes geschrieben: | | Auch entfallen jegliche Speicherüberlegungen und irgendwo habe ich gelesen, dass sich ein statisches Array besser zum Sortieren (genau das, was ich mit diesem Array vorhabe) eignet, da die Datensätze physisch nebeneinander liegen. |
Wo hast du denn den Unsinn her? Bei einem dynamisches Array sind ebenfalls alle Elemente physikalisch hintereinander abgelegt. |
Da hat er Recht, der Mars, da dyn. Arrays nur aus Zeigern bestehen. Beispiel:
Quelltext 1: 2: 3: 4: 5:
| MyArray = Array of (TMyClass); // exorbitente grosse Class Setlength(MyArray,10); SetLength(MyArray, 1); Setlength(MyArray,1000); SetLength(MyArray,100000); |
danach dürfte der Speicher etwas fragmentiert sein und wo windows den Speicher hernimmt bei 2 GB max. Größe eines dürfte auch klar sein. Da rödelt dann die Platte. Wo das Zeug endlich physikalisch liegt in der Heiserberg'schen Unschärferelation, halt irgentwo.
grüße
MSCH
|
|
derDoc
      
Beiträge: 623
Win Vista Prof
D2007 Prof
|
Verfasst: Fr 21.02.03 20:23
Titel: Re: Dynamische Arrays
| MSCH hat folgendes geschrieben: | | Die Performance ist mit dem Zeitalter heutiger PCs eh untergeordnet. |
Also MSCH, ich weiß ja nicht was du so programmierst, aber mit dieser Einstellung kann das ja eigentlich nur M*** werden. Es gibt auch in Zeiten in denen Intel 3,06 GHz Prozessoren vorstellt noch Leute, die ihre P1 130 MHz Systeme mit Win95 zum Arbeiten benutzen. Vor allem wenn es der Wirtschaft so schlecht geht wie jetzt und jeder Investitionen scheut, natürlich auch in Computersysteme. Deshalb sollte es nie gleichgültig sein, wie die Performance auf "alten" Systemen ist.
_________________ MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Fr 21.02.03 20:29
| MSCH hat folgendes geschrieben: | Da hat er Recht, der Mars, da dyn. Arrays nur aus Zeigern bestehen. Beispiel:
Quelltext 1:
| MyArray = Array of (TMyClass); // exorbitente grosse Class | |
Wenn du nun MyArray = array[0..100000 - 1] of TMyClass; deklariertst, so werden auch nur 100000 Zeiger gespeichert. Das liegt in der Natur der Klassen unter Delphi. Man kann ja auch anstatt einer Klasse einen ordinalen Typ (Integer) oder eine Fließkommazahl, record usw. verwenden.
| Zitat: | Quelltext 1: 2: 3: 4:
| Setlength(MyArray,10); SetLength(MyArray, 1); Setlength(MyArray,1000); SetLength(MyArray,100000); |
danach dürfte der Speicher etwas fragmentiert sein |
Und hast du das auch mal mit statischen Arrays gemacht? Das geht bei diesen nämlich nicht.
_________________ Ist Zeit wirklich Geld?
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Mo 24.02.03 22:45
Wenn die Anzahl der Elemente IMMER gleich ist (und sich auch nicht ändern wird) würde ich zu einem statischen Array tendieren.
Ansonsten immer dynamische.
Dynamische Arrays sind bis auf das SetLength und for x := 0 to High(Array) auch nicht viel anderst als statische (Und daran gewöhnt man sich schnell)
Schlimm finde ich Programme, die ein rießiges Array anlegen, nur weil ein Benutzer vielleicht mal wirklich 1000 Adressbuch-Einträge speichern will. Das ist pure Speicherverschwendung.
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Mo 24.02.03 22:49
Und wenn der Benutzer dann den 1001 Eintrag eingibt, stürzt das Programm auch noch ab.
_________________ Ist Zeit wirklich Geld?
|
|
|