AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speicheranspruch Leerstring in Konstante

Ein Thema von BetaBot · begonnen am 28. Dez 2007 · letzter Beitrag vom 29. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
BetaBot

Registriert seit: 6. Mai 2007
35 Beiträge
 
Turbo Delphi für Win32
 
#1

Speicheranspruch Leerstring in Konstante

  Alt 28. Dez 2007, 13:25
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Speicheranspruch Leerstring in Konstante

  Alt 28. Dez 2007, 13:47
wenn es ShortStrings sind, belget jeder 255 Byte.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Speicheranspruch Leerstring in Konstante

  Alt 28. Dez 2007, 13:50
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 von mkinzler:
wenn es ShortStrings sind, belget jeder 255 Byte.
Mach ihm doch keine Angst -.-^^ Wenn es normale Strings sind (alles andere wäre doch blöd...) dann sinds eben soweit ich weiß nur 4 Byte...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Speicheranspruch Leerstring in Konstante

  Alt 28. Dez 2007, 13:52
Kommt auf die Einstellungen an.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Speicheranspruch Leerstring in Konstante

  Alt 28. Dez 2007, 14:21
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


Delphi-Referenz durchsuchenShortStrings liegen als Konstanten komplett im Programmcode versteckt und verbrauchen garkeinen RAM.


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.
$2B or not $2B
  Mit Zitat antworten Zitat
28. Dez 2007, 16:03
Dieses Thema wurde von "Dax" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Object-Pascal / Delphi-Language" verschoben.
Falsches Forum
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Speicheranspruch Leerstring in Konstante

  Alt 28. Dez 2007, 16:05
Zitat von himitsu:
also eine richtige Konstante liegt nicht im RAM.
wirklich?
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
1234588

Registriert seit: 14. Jan 2007
Ort: Stuttgart
164 Beiträge
 
#8

Re: Speicheranspruch Leerstring in Konstante

  Alt 28. Dez 2007, 16:18
Delphi-Quellcode:
const
  i: Integer = 123;

begin
  Writeln('0x', Integer(@i));
  Writeln(PInteger(@i)^);
  PInteger(@i)^ := 666;
  Writeln(i);
  Readln;
end.
ueber pointer laesst sich die konstante i aendern. folglich muss sie im arbeitsspeicher liegen.
(geht aber auch nur mit typisierten konstanten).

funktioniert zumindest mit fpc wunderbar (auch ohne {$J+})
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Speicheranspruch Leerstring in Konstante

  Alt 28. Dez 2007, 16:35
Zitat von 1234588:
ueber pointer laesst sich die konstante i aendern. folglich muss sie im arbeitsspeicher liegen.
(geht aber auch nur mit typisierten konstanten).
Dazu schrieb schon himitsu was:

Zitat von himitsu:
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.
Und typisierte Konstanten sind eigentlich nichts anderes als statische Variablen (C++: static int z.B.) und verbrauchen von daher Speicher, schon allein da es eigentlich Variablen sind (intern).

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).
  Mit Zitat antworten Zitat
BetaBot

Registriert seit: 6. Mai 2007
35 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Speicheranspruch Leerstring in Konstante

  Alt 28. Dez 2007, 19:01
Also mit 4 Byte pro Leerstring kann ich sehr gut leben.

Vielen Dank für eure schnellen Antworten. Super!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:14 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