2010-09-08 4 views
2

En c vous pouvez faireEst-il possible de changer un emplacement de mémoire en mémoire partagée dans C?

shmid = shmget(SHMEM_KEY, sizeof(int*) * n , SHEMEM_MODE | IPC_CREAT); 
int* shmem = shmat(shmid, NULL, 0); 

à attribuer d'abord donné l'espace mémoire libre comme une mémoire partagée.

Est-il possible d'affecter l'espace mémoire actuel en tant que mémoire partagée?

+0

Je ne le pense pas. Je pense (mais ne me citez pas) que la différence entre la mémoire privée et partagée est l'endroit où elle se trouve. Donc je ne pense pas que vous pouvez "assigner" un emplacement de mémoire comme partagé. Mais, je peux me tromper. –

Répondre

1

Vous utilisez un alias shmat() la mémoire partagée que vous avez créé à une plage alignée page arbitraire dans votre espace d'adressage

Donc, ce n'est pas prendre un peu de mémoire que vous avez déjà et de les publier; En prenant une nouvelle mémoire partagée, vous copiez ensuite ce que vous voulez publier, puis utilisez shmat pour l'alias où vous aviez ce que vous vouliez publier - cela a le même effet.

+0

bien là vous allez. –

+0

Je ne suis pas très clair, pourriez-vous peut-être désambiguïser par la syntaxe actuelle? – Anatoli

0

D'abord, je vous conseille de ne pas utiliser les shmget oldish interfaces mais les interfaces POSIX plus modernes shm_open et mmap (si vous les avez, vous ne spécifiez pas votre système)

Puis le mmap vous permet de proposer une adresse dans l'espace d'adressage où vous souhaitez avoir le segment

ce n'est pas exactement ce que vous demandez, mais le plus proche, vous pouvez obtenir , je pense

Questions connexes