![]() |
Delphi-Version: 5
Hat Setlength eine interne vorgeschaltete Längenprüfung?
Hallo Delphifreunde!
Weder meine Recherche im Internet, in der Delphi-Dokumentation noch im Quelltext (der Unit system) konnte meine Frage klären: Hat die Setlength-Prozedur (n.m.W. für Strings und dynamische Arrays, vielleicht neuerdings noch für anderes) eine interne vorgeschaltete Längenprüfung? Oder ist die Setlength-Prozedur ohnehin so intelligent (programmiert worden), daß die Längensetzung nur dann in irgendeiner Form Speicher verbraucht, wenn diese eine Längenänderung zur Folge hat? Oder, etwas plakativer: Ist es sinnvoll, redundant oder sogar schädlich,
Delphi-Quellcode:
if length(Datenstruktur) <> Wunschlaenge then setlength(Datenstruktur, Wunschlaenge)
zu schreiben? Vielen Dank im voraus und viele Grüße Delphi-Laie |
AW: Hat Setlength eine interne vorgeschaltete Längenprüfung?
Bin mir relativ sicher, dass SetLength nichts tut wenn die Länge des Arrays/Strings schon gleich der geforderten Länge ist.
Aber eine Garantie/Quelle habe ich nicht. |
AW: Hat Setlength eine interne vorgeschaltete Längenprüfung?
Zitat:
|
AW: Hat Setlength eine interne vorgeschaltete Längenprüfung?
Es gibt keine Prüfung in DynArraySetLength, ob die Länge bereits stimmt. Wie Uwe schon schrieb passiert da einiges und es werden lediglich die Fälle behandelt, dass die neue Größe größer bzw. kleiner ist. Deshalb macht eine Prüfung vorher durchaus Sinn, wenn der Fall häufiger vorkommt.
|
AW: Hat Setlength eine interne vorgeschaltete Längenprüfung?
3 Experten, 4 Meinungen...Spaß beiseite, vielen Dank!
|
AW: Hat Setlength eine interne vorgeschaltete Längenprüfung?
SetLength sorgt als Erstes immer erstmal für eine Unique-Instanz, selbst wenn nichts gemacht wird.
Und es gibt einen Unterschied welches "SetLength" aufgerufen wird. SetLength für ShortString -> String[x] SetLength für WideString -> OLE32 SetLength für LongStrings -> AnsiString, UnicodeString, UTF8String, ... (wobei das "dyn. Arrays" mit kompltt funktionsfähigem CopyOnWrite und paar weiteren Addons sind) SetLength für dynamische Arrays (mit oder ohne gemanageten Typen im Array) siehe System.pas (abgesehn von dem Problemchen mit den fehlenden Quellcodes in der Starter) _SetLength(s: PShortString; ...) _WStrSetLength _LStrSetLength, _UStrSetLength _DynArraySetLength |
AW: Hat Setlength eine interne vorgeschaltete Längenprüfung?
Hallo,
also laut meinem Quellcode der System.pas wird bei einem Array-SetLength nicht erkannt, wenn die Länge gleich bleibt. Komisch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 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-2025 by Thomas Breitkreuz