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

Odpowiedz Nowy wątek
2019-08-13 14:41
fvg
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.

edytowany 1x, ostatnio: fvg, 2019-08-13 14:43

Pozostało 580 znaków

2019-08-13 14:48
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.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 2x, ostatnio: Shalom, 2019-08-13 14:50

Pozostało 580 znaków

2019-08-13 14:56
0

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


Szacuje się, że w Polsce brakuje 50 tys. programistów

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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