AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Wie ermittelt man die Größe eines Objekts im Speicher?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie ermittelt man die Größe eines Objekts im Speicher?

Ein Thema von TonyMontana · begonnen am 17. Jan 2008 · letzter Beitrag vom 6. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
TonyMontana
(Gast)

n/a Beiträge
 
#1

Wie ermittelt man die Größe eines Objekts im Speicher?

  Alt 17. Jan 2008, 18:22
Diese Frage konnte mir in meinem letzten Thema keiner beantworten.

Es geht um ein Objekt, dass folgendermaßen aussieht:

Delphi-Quellcode:
type
  TMyRec = class(TObject)
  private
    FValue: Integer;
    FText: String;
    FStringList: TStringList;
    function GetList(i: Integer): string;
    procedure SetList(i: Integer; const Value: string);
  public
    property Value: Integer read FValue write FValue;
    property Text: string read FText write FText;
    property SringList[i: Integer]: string read GetList write SetList;
    constructor Create;
    destructor Destroy;
end;
Im Prinzip geht es mir darum, das Objekt in eine Datei zu speichern. Theoretisch ginge das ja auch wenn man einzeln die Felder einliest mit SizeOf und Length sollte man dann auch die Größe der Felder ermitteln können...
Allerdings wird das doch etwas umständlich, sollte die Klasse mal erweitert werden ...
Es muss doch irgendwie Möglich sein, zB einen Pointer auf den Anfang einer Klasseninstanz wie oben definiert zu setzen und dann Komplett in eine Datei "einzulesen", oder?
Dafür benötige ich aber eben auch die Größe der Klasseninstanz, ansonsten weiß ich ja nicht wie viel eingelesen werden soll.

Ich hoffe mal, ich konnte mein Problem deutlich machen. Vielleicht gibt es ja auch bessere Alternativen für diese Problemstellung?

Falls mir wieder keiner Antwortet, dann nehme ich einfach mal an, die Frage ist so trivial, dass ich erstmal ein Delphi-Buch lesen sollte um dann in der Lage zu sein mir die Frage selbst zu beantworten?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Wie ermittelt man die Größe eines Objekts im Speicher?

  Alt 17. Jan 2008, 18:24
Delphi-Referenz durchsuchenInstanceSize
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
TonyMontana
(Gast)

n/a Beiträge
 
#3

Re: Wie ermittelt man die Größe eines Objekts im Speicher?

  Alt 17. Jan 2008, 18:37
InstanceSize hatte ich auch schon probiert ... liefert mir irgendwie 16. Und das kann nicht sein, da ich vorher stehen hatte:
StringList.Text := ListBox1.Items.Text oder so... Wobei in der ListBox einiges stand!
Oder setze ich da wieder nur einen Pointer?
Auch wenn, dass hilft mir bei meinem Problem ja dann auch nicht weiter...
Also mehr und bessere Vorschläge
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.549 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Wie ermittelt man die Größe eines Objekts im Speicher?

  Alt 17. Jan 2008, 18:38
Naja, FStringList enthält nur einen Pointer auf die Instanz.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Wie ermittelt man die Größe eines Objekts im Speicher?

  Alt 17. Jan 2008, 18:39
Ansistrings und Klassen sind Pointer. InstanceSize ist für alle Instanzen einer Klasse gleich (deshalb ist es auch eine Klassenmethode).
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Wie ermittelt man die Größe eines Objekts im Speicher?

  Alt 17. Jan 2008, 18:43
Zitat:
Es muss doch irgendwie Möglich sein, zB einen Pointer auf den Anfang einer Klasseninstanz wie oben definiert zu setzen und dann Komplett in eine Datei "einzulesen", oder?
Nö. Geht nicht.
Du kannst dich ja mal hier und hier schlau machen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
TonyMontana
(Gast)

n/a Beiträge
 
#7

Re: Wie ermittelt man die Größe eines Objekts im Speicher?

  Alt 17. Jan 2008, 18:46
Ist ja alles schön und gut und warscheinlich auch richtig, dennoch möchte ich ja nicht die Größe der Klasse sondern des Objekts. Und zwar aus dem Grund, weil ich das ganze Objekt dann mal speichern und irgendwann wiederladen möchte!
Geht das jetzt irgednwie oder verstehe ich irgendwas nicht?

@Sirius: Ok geht also nicht... Endlich mal ne klare Antwort und nicht irgendwelche Empfehlungen, wo ich dann irgendwann herausfinden muss, das hat mit meinem Problem bzw. meiner Fragestellung nichts zu tun.
Ich muss jetzt erst mal weg, mache mir mal Gedanken dann. Warscheinlich kann ich dann nur den Umweg mit length etc nehmen, mit der funktion bekomme ich da die Stringlänge heraus und kann mir alle Daten selber zusammensuchen und dann abspeichern.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Wie ermittelt man die Größe eines Objekts im Speicher?

  Alt 17. Jan 2008, 18:48
Das geht nicht. Wenn du zum Beispiel Zeiger in der Klasse hast, dann weißt nur du (und der Memorymanager), wie groß der Speicherblock ist, auf den sie zeigen. Strings und dynamische Arrays lassen sich noch über RTTI erkennen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Wie ermittelt man die Größe eines Objekts im Speicher?

  Alt 17. Jan 2008, 18:51
InstanceSize liefert die größe des Ojektes

und was da noch anderswo über Pointer unt Co. gelagert wird, ist da nicht enthalten.


für ein korrektes Ergebnis mußt du selber alles auslesen, aber das geht nur für eine eigene klasse, die du bearbeiten kannst.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.549 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Wie ermittelt man die Größe eines Objekts im Speicher?

  Alt 17. Jan 2008, 18:53
Und zum Speichern: das wird spätestens dann ganz übel, wenn mehrere Instanzen in einer Datei abgelegt werden sollen. IMO müsste man sich dafür dann ein generisches Format ausdenken, aber ich lasse mich auch gerne eines Besseren belehren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 04:46 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