shared library - czy zmienna będzie istniała pod tym samem adresem w pamięci RAM

1

Mamy sharowana libkę *.so.
Jak libka nie jest linkowana przez żaden proces to zmienna x nie ma adresu w pamięci RAM, istnieje tylko w pamięci dysku.
Procesy mogą linkowac sie do tej libki.
Adres zmiennej 'x' w wirtualnej przestrzeni adresowej procesów może być różny.
Ale czy jak te procesy modyfikują zmienną 'x' to one modyfikują tą samą zmienną w przestrzeni fizycznej w RAMie? Mi się wydaje że nie ale nie jestem pewny, ktoś mógłby potwierdzić?
Mi się wydaje że jak proces sharujący libkę ładuje się do pamięci RAM to zmienna 'x' ładuje się za każdym razem pod inną komórkę pamięci RAM w linuksie. Nie ma żadnego mechanizmu pamiętania, że wystartował sie proces A zmienna x załadowana do RAMu pod 0x5000 004c, potem startujemy proces B i wydaje mi się, że zmienna x będzie to osobna instancja dla procesu B pod innym adresem pamieci RAM.
lib.h

#pragma once

extern int x;

lib.c

#include <lib.h>
#include <stdio.h>

x = 0;

Jak mam racje wyżej to niech ktoś potwierdzi, byłbym wdzięczny. Bo zamierzam użyć mechanizmu pamięci sharowanej tutaj dla zmiennych które chcę by były sharowane pomiedzy procesami (shm_open, mmap => wtedy tak uproszczając taka zmienna uchwyt w /dev/shm zacznie miec do adresu fizycznego w RAMie), ale może nie mam racji co do powyższego.

1

Każdy proces w trakcie startu dostanie swoją kopie. Procesy są niezależne. Ale to tyczy się danych. Sam kod biblioteki jest współdzielony pomiędzy procesami -> patrz GOT PLT, dynamic linking.

0

@fvg: to co napisałeś wydaje się być wszystko poprawne.
Zobacz jeszcze tu: https://unix.stackexchange.com/a/116332

1 użytkowników online, w tym zalogowanych: 0, gości: 1