![]() |
Re: TObjectlist.add(record)?
Zitat:
Mal sehen ob ich's erlären kann :) Wir haben hier eine völlig sinnlose Function mit einer Lokalen variablen.
Delphi-Quellcode:
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?
Function VoelligSinnloseBerechnung(x:integer):integer;
var i:integer; begin i:=x*3; result:=i*5; end; [ ] 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 :) |
Re: TObjectlist.add(record)?
@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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 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