AGB  ·  Datenschutz  ·  Impressum  







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

TObjectlist.add(record)?

Ein Thema von ozz · begonnen am 6. Mär 2006 · letzter Beitrag vom 7. Mär 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#11

Re: TObjectlist.add(record)?

  Alt 7. Mär 2006, 17:49
Zitat von sniper_w:
Kannst du das bitte mehr dazu sagen.

Mal sehen ob ich's erlären kann

Wir haben hier eine völlig sinnlose Function mit einer Lokalen variablen.

Delphi-Quellcode:
Function VoelligSinnloseBerechnung(x:integer):integer;
var
  i:integer;
begin
  i:=x*3;
  result:=i*5;
end;
Nun ist i eine lokale Variable, die nur für die Function benötigt wird. Während die Procedure durchläuft ist i auf einer bestimmten Stelle im Hauptspeicher zugreifbar. Das heist ein Bestimmter Speicherplatz im Hauptspeicher ist für i reserviert. Was passiert nun mit i nachdem die Procedure durchgelaufen ist?

[ ] 1: Die Variable behält ihren Speicherplatz. Somit würde die Sache mit dem Pointer/Zeiger, der von marabu vorgeschlagen wurde funktionieren.

[ ] 2: Der Speicherbereich wird freigegeben und eine andere Procedure könnte dort an diesem Speicherplatz die nächste Variable plazieren.


Stell dir vor diese Function wird im Laufe des Programms ca. 3 Millionen mal aufgerufen.

Mit der ersten Variante sähe das ganz schön schlimm aus. Denn für jeden Aufruf würde i einen neuen Speicherpaltz erhalten und auch behalten. Aber nur mit dieser Variante würde würde das Beispiel von Marabu funktionieren, denn der Zeiger der in die Liste aufgenommen wird, zeigt eben auf diesen immer gültigen Speicherbereich.

Korrekt ist aber die zweite Version. Mit dieser Version kannst du dann aber nicht mehr mit Zeigern auf die lokalte Variable i arbeiten. Denn nach Beenden der Procedure zeigt der Zeiger auf einen Speicherbereich, der vieleicht noch den Wert von i beinhaltet aber ggf. auch schon wieder für andere Zwecke verwendet wird.


Edit:
Tja. Da war Marabu wohl schneller. (Und hat es auch eleganter erklärt)

@Marabu: Wollte dich nicht kränken
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#12

Re: TObjectlist.add(record)?

  Alt 7. Mär 2006, 18:20
@bernau, @marabu:
Die ganze Sache ist ein grosses Missverständniss. Die Sache mit den Local/Global variablen, Stack/Heap ist mit komplett klar, nur wollte ich mit meiner letzen Frage deine, brenau - von mir missverstandene Aussage, nochmals klären.
Alles kann man an dieser Stelle ruhig vergessen, was meine lezte Frage und darauf gefolgte Antworten, betrifft.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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