Avatar billede skra Nybegynder
23. oktober 2002 - 13:56 Der er 12 kommentarer og
1 løsning

Segmentering af Shared memory i C

Hvordan segmenterer jeg min shared memory, så der fx kan ligge 10 structs i en eller anden datastruktur (liste, træ osv.) i den delte hukommelse?

Håber på lidt hjælp
Avatar billede morten_grouleff Nybegynder
23. oktober 2002 - 14:03 #1
Hvilket OS?
Avatar billede skra Nybegynder
23. oktober 2002 - 14:06 #2
Linux
Avatar billede morten_grouleff Nybegynder
23. oktober 2002 - 14:17 #3
Jeg forstår stadig ikke helt spg. Hvad mener du med "segmenterer"? Mener du bruge etstykke hukommelse til flere instancer af en struct? Eller opdeling med forskellige beskyttelser? Hvad er "shared memory"? er det delt mellem tråde eller processer eller funktioner?

struct foo {
  int i;
  int j;
};

void doit(void *sharedMem) {
  struct foo* foop = (struct foo*)sharedMem;
  /* sæt 'i' i den første instans */
  foop[0].i = 4;
  /* sæt 'i' i den 6. instans */
  foop[5].i = 4;
}

?
Avatar billede slashdotdoek Nybegynder
23. oktober 2002 - 14:18 #4
http://www.ecst.csuchico.edu/~beej/guide/ipc/shmem.html .... sådan gør du !

Desuden kan der ligge hvad som helst i shared memory bare husk at lave size_t stor nok i shmget.

svar nok ?
Avatar billede skra Nybegynder
23. oktober 2002 - 14:34 #5
slashdotdoek: selvom jeg laver size_t kæmpe stor kan jeg jo alligevel kun placere én struct i den delte hukommelse da jeg, for at placere noget i hukommelsen, gemmer dataene i den pointer jeg shmat()'er til, eller hvad?

Problemet er at jeg gerne vil have flere structs i den samme delte hukommelse
Avatar billede slashdotdoek Nybegynder
23. oktober 2002 - 14:44 #6
hehe ja den er jo lidt tricky, den delte hukommelse er jo et struct. Men jeg forstår ikke hvorfor du vil have 10 når du kan nøjes med ét, måske er det fordi dine planer med det ikke er helt gennemskuelige. Hvis du vil lave et træ eller en liste, så er det jo nok med ét. Ideen med shared memory er jo at man tilgår den samme hukommelse, hvis du alligevel vil lave flere forskellige, så er det måske en idé med flere shm'er.... hvis jeg har misforstået siger du bare til :p
Avatar billede skra Nybegynder
23. oktober 2002 - 14:49 #7
Kan du så ikke uddybe hvordan du vil lave et træ, hvor hvert element i træet indeholder en int, en string og en double?... hvor hele træet skal ligge i shm'en?

Jeg kan ikke se man kan løse det smartere end at lade hvert element i træet være struct i sig selv?
Avatar billede slashdotdoek Nybegynder
23. oktober 2002 - 14:56 #8
hele træet behøver jo ikke at ligge i shm, det skal kun være anetræet, de andre structs/noder/whatever kan du jo gøre tilgængelig for shared på andre måder, ideen med shm er jo bare muliggøre ipc. Så kun én shm, men shm struct kan jo godt have underliggende structs.

Men jeg ved stadig ikke hvad dine planer er..?

hygge.
Avatar billede slashdotdoek Nybegynder
23. oktober 2002 - 14:57 #9
men dit relaterede jo til segmentering... :p
Avatar billede slashdotdoek Nybegynder
23. oktober 2002 - 14:57 #10
*spørgsmål ....ups.
Avatar billede skra Nybegynder
23. oktober 2002 - 15:04 #11
hmm... så er det måske bare mig der forsøger at bruge shm forkert... jeg synes bare det ville være smart at have samtlige data liggende i en fælles tilgængelig hukommelse, så der ikke er en process der skal styre adgangen til træet, men jeg finder på en anden løsning... tak for diskutionen

og fortsat god dag
Avatar billede skra Nybegynder
23. oktober 2002 - 15:05 #12
og ja... spørgsmplet omhandlede opdeling af den delte memory
Avatar billede slashdotdoek Nybegynder
23. oktober 2002 - 16:30 #13
oki no prob, husk at hastighed også er en vigtig ting med ipc, specielt de kritiske steder.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester