Pamiec wspoldzielona

0

Witam, mam takie pytanie. Mam kilka(nascie) procesow i chce zeby kazdy z nich mial dostep do pewnej listy dwukierunkowej. Lista jak to lista nie wiem ile jaka bedzie miala dlugosc ;). Jesli chcialbym skorzystac z pamieci wspoldzielonej, ale lista "wyszla by" poza ta pamiec to czy nadal wszystkie procesy widzialy by ja cala? tzn. czy przez wskazniki zawarte w poszegolnych strukturach moglbym sie dalej odwolywac do kolejnych elementow.. Jesli nie to czy moglibyscie mi podpowiedziec jak takie cos zrobic..

dopisane:
hmm troche sie bawilem z pamiecia i ze stringami, i niby (przy pamieci zadeklarowanej w shmget() na 4 bajty) napis "bardzo , naprawde bardzo dlugi napis" jest ustawiany w jednym procesie a odczytywany bez problemu w drugim.. no ale wole sie upewnic czy to bedzie prawidlowo i czy sie nie wywali w najmniej oczekiwanym momencie.. :)

0

jezeli do alokowania wszystkich kawalkow beda uzyte funkcje odpowiezialne za alokowanie blokow wspoldzielonych - tak. ale jesli taki obiekt bedzie np. sam sobei robil int * y=new int[10], to juz taki blok nie bedzie widoczny.. jesli zas np. zamiaast alokowac mikrobloczki na kazda jedna zmienna wezmiesz sobie np. i zrobisz kloca 20mb liczac ze w ten sposob oszczedzisz tworzenia tysiaca uchwytow do malutkich obszarkow pamieci, no to juz musisz sie sam postrac zeby wszytkie dane potrzebne sie w nim zawiraly i wskazniki trafialy do niego a nie byly new'owane losowo..

0

heh, czyli w zasadzie to mnie nie urzadza ;).
A tak z ciekawosci zapytam jeszcze jak mozna 'ustalic' adres nowego obiektu przy tworzeniu go za pomoca new (lub malloc()) ?

0

Możesz go zrobić i wartość wskaźnika wyciągnąć i dać do zmiennej int. Później to wypisać. Przed zalokowaniem nie da się, ponieważ to system rzuca pamięcią.

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