static variablen in einer shared library?



  • also ich hab eine funktion in der library...

    int getNextInt(){
      static unsigned x = 0;
      return ++x;
    }
    

    jetzt hab ich ein prog, welches zwei module mit dlopen läd. (dlopen(...,RTLD_LAZY)) beide module werden dynamisch mit der library gelinkt. wenn ich die funktion getNextInt() in modul a aufrufe, welchen wert hat dann die rückgabe vom nächsten aufruf von getNextInt() in modul b ist das dann 2 oder 1? und falls 1, kann ich iwie das verhalten ändern, so dass ich 2 erhalten würde 😕



  • unsigned getNextInt() ehe einer sich aufregt 😉



  • Du erhälst schon 2, aber durch Probieren hättest du das auch selber rausgefunden 🙂



  • Kommt im Allgemeinen bei shared libraries aber auch auf das System an. Manche kopieren die globalen Variablen (zumindest die änderbaren) in jeden Adressraum, so dass diese sich nicht gegenseitig beeinflussen. Macht z.B. bei Funktionen wie strtok auch verdammt viel Sinn 😉

    Unter Windows sind die globalen Variablen standardmäßig prozesslokal. Nur über ein spezielles Pragma kann man einzelne Variablen in einen prozessübergreifenden Bereich verschieben.



  • @Tippgeber
    Er hat ja aber nur einen Prozess, also wird er auch niemals 2 Kopien der Variable bekommen...
    ?



  • hustbaer schrieb:

    @Tippgeber
    Er hat ja aber nur einen Prozess, also wird er auch niemals 2 Kopien der Variable bekommen...
    ?

    Da habe ich mich verlesen.


Log in to reply