Frage zu DSO und Threads



  • Wenn ich eine einfache Funtkion in einem shared Object habe, zb. sowas:

    char* test(int i)
    {
     return new char[i];
    }
    

    Dieses so später mit dlopen in einem Programm lade und die Funktion test aufrufe, kann ich den allokierten Speicher in der Hauptanwendung später einfach mit delete löschen oder gibs da Probleme???

    2. Wenn ich zwei Threads habe, die beide im geleiche Adressbereich laufen und ich jetzt im ersten Speicher mit new allokiere und den Pointer an den zweiten übergebe und der den Speicher mit delete freigeben möchte, gibt es dann Probleme (natürlich sorge ich dafür das der erste dann nichtmehr auf den Speicher zugreift)



  • sollte eigentlich beides kein Problem sein. Ersteres lässt sich ja allein dadurch erklären, dass new/delete selbst in shared objects liegen (libstdc++) und letzteres ist ja auch kein Problem, da sich die Threads ja den gleichen Addressraum teilen.



  • Unter Linux müsste es gehen, aber das heißt nicht, dass das auf allen Systemen geht. Unter Windows ist es z.B. mit Visual Studio sehr von den Linkereinstellungen abhängig, ob der erste Punkt geht oder nicht.


Anmelden zum Antworten