![]() |
Speicheranspruch Leerstring in Konstante
Hallo Delphi - Gemeinde,
vorab meine besten Wünsche, vor- und nachträglich, zu den jeweiligen Festen und hier die Situation: Ich plane für ein Programm mehrere Konstanten, die widerrum aus mehreren, großen Array of String bestehen sollen. Nun ist es aber so, dass ein Teil dieser Stringfelder leer bleiben wird. Also die Strings an dieser Stelle enthalten keine Zeichen. Und nun meine Frage: Wird für diese Leerstrings, in irgendeiner Art und Weise, Speicher bereit gestellt oder verbraucht? Ich habe die Befürchtung mein Programm für nichts unnötig "aufzublasen". Ist meine Befürchtung berechtigt? Vielen Dank im Voraus, Silvio. |
Re: Speicheranspruch Leerstring in Konstante
wenn es ShortStrings sind, belget jeder 255 Byte.
|
Re: Speicheranspruch Leerstring in Konstante
Hi,
Ich bin da kein Experte aber ich gehe mal davon aus das für jeden Leerstring halt zumindest mal 4 Bytes reserviert werden. Das heißt Anzahl der Leerstrings mal 4 = "Verschwendeter" Speicher. Wobei ich nicht denke das das ganze so dramatisch ist. Kommt natürlich auf die Anzahl der Leerstrings an und es stellt sich die Frage: "Kann man es besser lösen?" Wenn man diese Frage mit "nein" beantworten muss, bleibt dir wohl eh nichts anderes übrig. Zitat:
|
Re: Speicheranspruch Leerstring in Konstante
Kommt auf die Einstellungen an.
|
Re: Speicheranspruch Leerstring in Konstante
also eine richtige Konstante liegt nicht im RAM.
Stringkonstanten (AnsiString) werden vom Kompiler mitten im Programmcode (z.B. der Exe) abgelegt. Auch das Array (wenn es als Konstante definiert ist) sollte da rumschwirren. am Ende wird maximal der Pointer auf das Array im RAM liegen (muß aber nicht ... hal jenachdem wie das Array im Programm angesprochen wird. Und selbst wenn das Array im RAM landet, dann sind da wiederum nur die Pointer zu den Strings/AnsiStrings enthalten, also das wären dann 4 Byte * StringAnzahl + 12 Byte zur Arraydefinition. Ein Leerstring hat keine Daten und der Zeiger zu diesen steht auf NIL ... also ein Leerstring verbraucht immer nur maximal 4 Byte ![]() Unter Win32 und mit Delphi. Achtung: typisierten Konstanten (dürfte Strings/Arrays aber im Normalfall nicht betreffen) werden von Delphi oftmals als konstante Variablen angelegt, würden also etwas peicher verbrauchen. |
DP-Maintenance
Dieses Thema wurde von "Dax" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Object-Pascal / Delphi-Language" verschoben.
Falsches Forum |
Re: Speicheranspruch Leerstring in Konstante
Zitat:
Also eine Konstante liegt natürlich in der Exe und wird auch genauso in deinen Adressbereich gemappt und i.A. mit der gesamten Exe in den RAM geladen. |
Re: Speicheranspruch Leerstring in Konstante
Delphi-Quellcode:
ueber pointer laesst sich die konstante i aendern. folglich muss sie im arbeitsspeicher liegen.
const
i: Integer = 123; begin Writeln('0x', Integer(@i)); Writeln(PInteger(@i)^); PInteger(@i)^ := 666; Writeln(i); Readln; end. (geht aber auch nur mit typisierten konstanten). funktioniert zumindest mit fpc wunderbar (auch ohne {$J+}) |
Re: Speicheranspruch Leerstring in Konstante
Zitat:
Zitat:
Echte, untypisierte Konstanten werden vom Compiler an der Stelle der Nutzung direkt eingesetzt und haben somit wirklich keinen Speicherverbrauch, ausser dass sie im Code direkt genutzt werden. (siehe himitsu's Beitrag). |
Re: Speicheranspruch Leerstring in Konstante
Also mit 4 Byte pro Leerstring kann ich sehr gut leben.
Vielen Dank für eure schnellen Antworten. Super! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 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