AGB  ·  Datenschutz  ·  Impressum  







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

Wann Speicher reservieren?

Ein Thema von Mr_G · begonnen am 8. Okt 2008 · letzter Beitrag vom 9. Okt 2008
Antwort Antwort
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#1

Wann Speicher reservieren?

  Alt 8. Okt 2008, 19:26
Hallo zusammen,
ich wollte mal fragen für welche Konstrukte ich eigentlich Speicher reservieren muss, wenn ich sie an eine API-Funktion übergebe.
Mir ist Beispielsweise bekannt, dass ich das für PChars (= dynamisches Array?) tun muss. Aber wie sieht es mit Record-Strukturen (mit Arrays oder auch ohne) aus?
Gruß

Mr_G
Jan
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Wann Speicher reservieren?

  Alt 9. Okt 2008, 10:07
Also... ich habe nun herausgefunden, dass man natürlich Speicher reservieren muss, wenn man nur mit dem Pointer auf ein solches Konstrukt arbeitet. Wie sieht es aber aus wenn ich z.B. einen Record normal deklariere und dann die Adresse des Records übergebe (ohne vorher was initialisiert zu haben)?
Ich wäre für Tipps in Form "allgemeiner Verhaltensregeln" sehr dankbar!
Jan
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#3

Re: Wann Speicher reservieren?

  Alt 9. Okt 2008, 10:18
Da das Konstrukt bereits existiert, und Du dessen Adresse übergibst, ist der Speicher ja schon vorhanden und adressierbar. Da ist es nicht nötig Speicher zu reservieren.

Im Prinzip brauchst Du New/Dispose nur wenn Du mit dynamischen Variablen hantieren willst.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Wann Speicher reservieren?

  Alt 9. Okt 2008, 10:19
Wenn du mit der Referenz auf ein Record arbeitest, also der Art
Delphi-Quellcode:
var
  x: TMyRecord;
, dann wird für diesen bereits per Compilermagic Speicher reserviert.
Nimmst du statt dessen einen Pointertypen auf einen Record der Art
Delphi-Quellcode:
var
  x: ^TMyRecord;
, so musst du selbst Hand anlegen. Im Grunde wie sonst auch.

Bei Records/Structs die von API Funktionen als reine out-Variablen zurückgeliefert werden, übernimmt diese Funktion meistens auch die Reservierung. Beispielsweise wird in manchen Messages ein Pointer auf einen Struct geliefert, und dort hättest du ja nichtmals die Chance einen Speicherbereich vorher dafür festzulegen. Da die WinAPI aber nicht immer zwangsweise in sich konsistent ist, kannst du eigentlich nur durch Nachschauen im msdn sicher sein wie diese oder jene Funktion es denn gerne hätte. Daher sind Faustregeln hier finde ich eher hinderlich
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Wann Speicher reservieren?

  Alt 9. Okt 2008, 10:19
Guten Morgen Jan,

meinst Du vielleicht sowas -> http://de.wikibooks.org/wiki/Program...ascal:_Records

Wenn Du eine Variable mit einem RecordTypen deklarierst wird bei der "Deklaration"
schon Speicher für diese Variable reserviert.
Das verhält sich genauso wie bei Variablen vom type Integer, Byte, Char o.ä.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Wann Speicher reservieren?

  Alt 9. Okt 2008, 10:27
Danke für die Antworten!
Zitat von Medium:
Wenn du mit der Referenz auf ein Record arbeitest, also der Art
Delphi-Quellcode:
var
  x: TMyRecord;
, dann wird für diesen bereits per Compilermagic Speicher reserviert.
Das wars was ich wissen wollte... ich dachte es könnte evtl. erst bei einer ersten Zuweisung der Fall sein.
Jan
  Mit Zitat antworten Zitat
Antwort Antwort


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 11: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