AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Keine dynamischen Arrays vom Typ TStringList möglich?

Keine dynamischen Arrays vom Typ TStringList möglich?

Ein Thema von Bastler · begonnen am 27. Apr 2007 · letzter Beitrag vom 27. Apr 2007
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Keine dynamischen Arrays vom Typ TStringList möglich?

  Alt 27. Apr 2007, 16:00
Ich glaube kaum, dass der Compiler so dumm ist, dass er das nicht wegoptimiert. Die zwei Möglichkeiten sollten also genau gleich lang brauchen. Allerdings wird die high-Methode bei statischen Arrays, die nicht 0-basiert sind, überhaupt nicht funktionieren und bei dynamischen Arrays, wie dem hier, oder statischen, 0-basierten Arrays zumindest die Lesbarkeit vermindern.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Keine dynamischen Arrays vom Typ TStringList möglich?

  Alt 27. Apr 2007, 16:05
hmmm... ich hab mal nen test gemacht^^
also ich hab jeweils 99999999 mal Dummy := High(Array) bzw Dummy := Length(Array) aufgerufen und siehe da... High braucht ca 200 ms länger
Dominik
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Keine dynamischen Arrays vom Typ TStringList möglich?

  Alt 27. Apr 2007, 16:11
Da hast du sicher eine Menge Messungenauigkeit durch das Multitasking mit drin...

EDIT: Ich hab mir mal den erzeugten Assembler-Code angesehen.

Bei length(a)+1 ist es (vereinfacht) das:

Delphi-Quellcode:
call @DynArrayLength
inc eax
Bei high(a)+2 das:

Delphi-Quellcode:
call @DynArrayHigh
add eax, 2
@DynArrayHigh sieht so aus:

Delphi-Quellcode:
call @DynArrayLength
dec eax
Man sieht also: Die length-Methode ist um ein paar Anweisungen kürzer. Das fällt natürlich überhaupt nicht ins Gewicht, da die length-Methode aber darüber hinaus auch verständlicher ist, würde ich diese bevorzugen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: Keine dynamischen Arrays vom Typ TStringList möglich?

  Alt 27. Apr 2007, 17:11
Zitat von 3_of_8:
Allerdings wird die high-Methode bei statischen Arrays, die nicht 0-basiert sind, ...
Doch, denn der Compiler weiss doch, wie das statische Array dimensioniert ist, und fügt daher die Konstante ein.

Es ist ja auch wartbarer:
Delphi-Quellcode:
Type
  TMyArray = Array [0..1234] of TFoobar;
...
Var
  A : TMyArray;

Begin
  For i:=Low (A) To High(A) Do A[i] := ..
...
Statt:
Delphi-Quellcode:
...
Begin
  For i:= 0 to 1234 Do A[i] := ...
...
Zitat von Franz Beckenbauer oder das Stoiber:
Ja gutehh, eine Konstante kannst halt auch nehmen eh...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Keine dynamischen Arrays vom Typ TStringList möglich?

  Alt 27. Apr 2007, 17:30
Ich dachte an das mit dem SetLength. Gerade ist mir aber aufgefallen, dass man die Länge von statischen Arrays gar nicht ändern kann.

Für einen For-Durchlauf ist high geeigneter (lesbarer und für statische Arrays geeignet), für Längenveränderung length.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz