bardzo prosto - w shmem zapisujesz wiersze macierzy, oraz tablice wskaznikow na nie. tak, wiersze TEZ MUSZA byc w shmemie - przeciez drugi proces tez musi moc je odczytac, no nie? i struktura wyglada tak jak zwykle, wskazniki w tablicy glownej pokazuja na wiersze.
....aale.. racz waszmość zauwazyc, ze proces1 i proces2 maja ODREBNE PRZESTRZENIE ADRESOWE. i kropka. wskazniki z procesu1, nawet jesli w przestrzeni procesu1 pokazuja na wiersze, to ich wartosci po odczytaniu w DRUGIM procesie, beda w jego przestrzeni pokazywac na cos zupelnie innego (*chyba ze bedziesz mial totalny FART/TRICK i segment z wierszami umiesci sie pod tym samym lokalnym adresem co w przestrzeni1..)
co z tym fantem? tu juz nietrywialnie: trzeba znalezc sposob, aby powiedziec procesowi2 gdzie ma szukac wierszy w SWOJEJ PRZESTRZENI.. wskaznikow NIE WOLNO umieszczac na żywca, nalezy je PRZELICZYC na bezpieczne wartosci WSPOLNIE zrozumiale, a potem kazdy z procesow na podstawie tych wartosci ma byc w stanie obliczyc sobie SWOJ adres konkretnej rzeczy..
np: mozna zamiast wartosci wskaznika zapisywac OFFSET wzgledem adresu bloku shmem do wewnatrz ktorego ten wskaznik pokazuje. np: mamy 1 blok shmem. w procesie1 widoczny pod adresem 0x00100000 oraz wskaznik 0x001001FE. zamiast zapisywac wskaznik, wpisujemy roznice: 0x000001FE. teraz, jak sobie proces2 podepnie ten blok pamieci i okaze sie ze w jego przestrzeni blok ten ma adres 0x12345678, to zapisany wskaznik by sie schrzanil.. ale na szczescie zapisano offset = 0x1FE, dzieki czemu proces2 wie ze docelowe miejsce to 0x12345678+0x1fe = 0x12345876. proces numer1 tez moze sie w ten sam sposob dostac do danych - tez widzi wskanzik/offset 0x1fe -- wiec przesunie go o swoj adres bloku i otrzyma pierwotne 0x001001FE..
mam nadzieje ze jest jasne