Es ist nicht nur Getmem und Freemem. Dann kommen noch new und dispose dazu, und dann noch das ganze Object und Classen Zeugs.Ohne das weiß valgrind nicht wann speicher alloziiert wird. Theoretisch wäre es auch möglich MemCheck zu forken und einen Pascal MemCheck zu bauen der GetMem und FreeMem hooked, aber da ist es einfacher einfach den FPC die richtigen funktionen im hintergrund benutzen zu lassen.
Unit SysUtils erzeugt Speicherleck unter Linux
-
- Beiträge: 6710
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Unit SysUtils erzeugt Speicherleck unter Linux
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 2081
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Unit SysUtils erzeugt Speicherleck unter Linux
Die benutzen im Hintergrund alle GetMem und FreeMem. Beispiel der Constructor ruft NewInstance auf:
Das kann man bei eigenen Klassen auch selbst überladen (wenn man z.B. klassen wo anders als auf dem Heap Alloziieren will)
Code: Alles auswählen
class function TObject.NewInstance : tobject;
var
p : pointer;
begin
getmem(p, InstanceSize);
if p <> nil then
InitInstance(p);
NewInstance:=TObject(p);
end;
-
- Beiträge: 904
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Unit SysUtils erzeugt Speicherleck unter Linux
Das geht alles letztlich auf die Speicherfunktionen des Heapmanagers runter.Mathias hat geschrieben: Do 5. Dez 2024, 19:01Es ist nicht nur Getmem und Freemem. Dann kommen noch new und dispose dazu, und dann noch das ganze Object und Classen Zeugs.Ohne das weiß valgrind nicht wann speicher alloziiert wird. Theoretisch wäre es auch möglich MemCheck zu forken und einen Pascal MemCheck zu bauen der GetMem und FreeMem hooked, aber da ist es einfacher einfach den FPC die richtigen funktionen im hintergrund benutzen zu lassen.
FPC Compiler Entwickler