Ich wollte nur wissen, wo Shared Memory in einem Linux-System residiert? Ist es im physischen Speicher oder virtuellen Speicher?Wo befindet sich der freigegebene Linux-Speicher?
Ich bin mir bewusst über die virtuelle Speicher Send Box des Prozesses, sie sind unterschiedlich von Prozess zu Prozess und Prozesse sehen nicht gegenseitig Speicher, aber wir können die Daten zwischen Prozessen mit IPC übergeben. Um das einfache Szenario zu implementieren, habe ich gerade ein einfaches Shared-Memory-Programm erstellt und versuche, die Shared-Memory-Adresse und Wert Rückgabe von shmat
Funktion, aber beide Prozesse haben unterschiedliche Adresse, aber gleichen Wert.
Hier ist das Schreibprogramm.
write.c
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
int main() {
key_t key=1235;
int shm_id;
void *shm;
int *ptr = 83838;
shm_id = shmget(key,10,IPC_CREAT | 0666);
shm = shmat(shm_id,NULL,NULL);
sprintf(shm,"%d",ptr);
printf("Address is %p, Value is %p \n", (void *)shm, (void *)&ptr);
printf("Shm value is %d \n", *(int *)shm);
return;
}
Hier ist das Leseprogramm.
read.c
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
key_t key=1235;
int shm_id;
void *shm;
int *p = (int *)malloc(sizeof(int));
shm_id = shmget(key,10,NULL);
shm = shmat(shm_id,NULL,NULL);
if(shm == NULL)
{
printf("error");
}
sscanf(shm,"%d",p);
printf("Address is %p %p %p %d\n",(void *)shm, (void *)p, (void *)&p, *p);
printf("Shared value is %d \n", *(int *)shm);
return 0;
}
Es wäre toll, wenn jemand im Detail erklären bitte könnte, wie die Prozesse den gleichen Wert sehen unterschiedliche Adressen trotz?
Diese Frage kommt von C pass void pointer using shared memory.
Danke.
ihre realen physikalischen Adressen werden – user2760375
geteilt Wie Sie die Erklärung in der Antwort verstanden haben, nehmen Sie es bitte – tez