Unit SysUtils erzeugt Speicherleck unter Linux

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Mathias
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

Beitrag von Mathias »

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.
Es ist nicht nur Getmem und Freemem. Dann kommen noch new und dispose dazu, und dann noch das ganze Object und Classen Zeugs.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
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

Beitrag von Warf »

Die benutzen im Hintergrund alle GetMem und FreeMem. Beispiel der Constructor ruft NewInstance auf:

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;
Das kann man bei eigenen Klassen auch selbst überladen (wenn man z.B. klassen wo anders als auf dem Heap Alloziieren will)

PascalDragon
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

Beitrag von PascalDragon »

Mathias hat geschrieben: Do 5. Dez 2024, 19:01
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.
Es ist nicht nur Getmem und Freemem. Dann kommen noch new und dispose dazu, und dann noch das ganze Object und Classen Zeugs.
Das geht alles letztlich auf die Speicherfunktionen des Heapmanagers runter.
FPC Compiler Entwickler

Antworten