Autor Beitrag
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 623

Win Vista Prof
D2007 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Fr 21.02.03 20:29 
MSCH hat folgendes geschrieben:
Da hat er Recht, der Mars, da dyn. Arrays nur aus Zeigern bestehen. Beispiel:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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?