Следующий источник создает общую память в / dev / shm
static char* conf;
#define STATE_FILE "/memtest.shared"
int shm_fd;
if((shm_fd = shm_open(STATE_FILE, (O_CREAT | O_EXCL | O_RDWR),
(S_IREAD | S_IWRITE))) > 0 ) {
; /* We are the first instance */
}
else if((shm_fd = shm_open(STATE_FILE, (O_CREAT | O_RDWR),
(S_IREAD | S_IWRITE))) < 0)
{
printf("Could not create shm object. %s\n", strerror(errno));
exit( 0 ) ;
}
int iTotalByte = 1024*1024*2 ;
ftruncate(shm_fd, iTotalByte );
conf = (char *) mmap(0, iTotalByte , (PROT_READ | PROT_WRITE), MAP_SHARED, shm_fd, 0) ;
if(conf == MAP_FAILED)
{
printf(" mmap error ....\n") ;
exit( 0 ) ;
}
Затем я запускаю приложение для подключения общей памяти:
numactl -N 0 -m 0 ./testz.exe <== pid 19852
Я пытаюсь выяснить в / proc / 19852 / maps или pmap -XX 19852
что такое физический адрес /dev/shm/memtest.shared
и не удалось интерпретировать, я наблюдаю, что INode одинаков для каждого приложения присоединить memtest.shared, но не знаю, физический ли это адрес memtest.shared, как получить физический адрес общей памяти?!
Примечания:
То, что я пытаюсь сделать, это предположить, что физический адрес разделяемой памяти равен 0x700000, затем я могу получить к нему доступ с помощью mmap / dev / mem, смещение 0x700000 и прочитать содержимое, поэтому мне нравится знать физический адрес разделяемой памяти.