unload shared object



  • Hallo.

    Die Frage betrifft denk ich speziell Linux.

    Ich habe mir ein Programm geschrieben, in dem ich mit:

    dlopen("mein.so",RTLD_LAZY)
    

    eine library lade.

    so weit so gut.

    Wenn ich jetzt aber an der library arbeite und strukturen änder (die größe),
    die library neu übersetze und das programm dann wieder starte...

    ...treten merkwürde verhalten auf.

    Das programm stürzt nicht ab, aber ich habe das gefühl, dass speicherübergreifend daten geschrieben werden.

    Wenn ich die library lösche, ein paar minuten warte, sie erneut erstelle und dann das programm starte, geht alles.

    beim beenden des programms, rufe ich auch dlclose auf um die library zu entladen.

    ist sie ggf. trotzdem noch irgendwie im speicher des systems?

    wie geht man bei diesem anwendungsfall am besten vor?



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (alle ISO-Standards) in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Eine Dll/So ist eine funktionsbibliothek, kein eigener Prozess 🙂
    Speicher wird prozess-spezifisch verwaltet, also kann es kein Speicherübergreifend geben 🙂
    Es sei denn du erzeugst IPC fähige Komponenten(shared memory & co und löschst die ned).
    Wenn ein Prozess sich beendet, wird also jeglicher Prozesslokaler speicher freigegeben ... also auch jeglicher in der Dll "normal" allokierter Speicher.
    Als entwickler sollt man sich aber trotzdem nicht drauf verlassen, sondern schön selber alles freigeben.

    Auf das OS kann man sich eigentlich verlassen (wenn nicht auf wen sonst ? )

    ist sie ggf. trotzdem noch irgendwie im speicher des systems?

    Normal eigentlich die Allokierten daten vom Prozess nicht.
    Der maschinencode hingegen meist schon, der wird oft gecasht damit er von anderen Prozessen Schnell geladen werden kann. Das sollt aber nicht so viel sein.

    Welche "Tools" verwendest du, wo du siehst/meinst das die shared lib noch speicher anzieht ?
    Wie allokierst du speicher in der Dll ... ?

    wie geht man bei diesem anwendungsfall am besten vor?

    Tabletten gegen Paranoia ... ^^
    CHecken, was du expliziet und impliziet an IPC betreibst.
    Mal mit nem Speicher tracking tool draufschauen, was generell keine schlechte Idee ist, aber eher bei deiner Sache ned hilft ^^

    Und wenn das alles ned hilft, Bisschen mehr über OSe lesen und wie die Speicher verwalten und wie die Zeugs cachen .... und weswegen man so systemmonitore nicht zum bewerten des Speicherverhaltens einzelner Prozesse hernehmen sollt ^^

    Ciao ...


Log in to reply