DLL per LoadLibrary: anderer Heap oder nicht?



  • Ich plane folgenden Ablauf:

    Das Hauptprogramm lädt eine DLL per LoadLibrary() und holt sich dann die Einsprungadresse eine Funktion mit GetProcAddress().

    Diese Funktion alloziiert mit malloc() einen Speicherbereich und gibt ihn an die Hauptapplikation zurück. Darf die Hauptapplikation diesen Speicherbereich per free() freigeben oder nutzen beide je einen getrennten Heap? In dem Fall würde free() ja fehlschlagen.



  • HansHans2 schrieb:

    Diese Funktion alloziiert mit malloc() einen Speicherbereich und gibt ihn an die Hauptapplikation zurück. Darf die Hauptapplikation diesen Speicherbereich per free() freigeben oder nutzen beide je einen getrennten Heap? In dem Fall würde free() ja fehlschlagen.

    Das hängt von deiner dll ab!? Falls du MSVC verwendest und es um den CRT Heap geht dann verwenden beide den gleichen Heap wenn beide die selbe dynamische Runtime linken. Am Besten stützt man sich aber nicht auf solche Dinge sondern sorgt einfach dafür dass alles was in der dll alloziert wird dort auch wieder freigegeben wird.



  • Deshalb kann man sich mehrere Heaps erstellen lassen. Du definierst zwei Funktionen in einer DLL - die eine reserviert den Speicher, die andere löscht ihn vom Heap in der DLL. Somit hat der Nutzer hinterher kein Problem mit der Speicherverwaltung, er weiß genau: "Diese Funktion erstellt, diese gibt wieder frei, mehr brauch' ich nicht wissen."

    Wie du mit HeapCreate einen eigenen Heap erstellst, entnimmst du bitte der MDSN.



  • Ich empfehle Dir:
    - Wenn die DLL Speicher allokier, dann mach dort einfach auch eine Funktion rein, die den Speicher wieder freigibt.

    So machen es alle gängigen APIs (z.B. SysAllocString, SysFreetring / CoMalloc, CoFree / usw.)


Log in to reply