Есть ли какой-нибудь возможный способ изменить расположение памяти на общую память в C? - PullRequest
2 голосов
/ 08 сентября 2010

В с можно сделать

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

для назначения первой заданной свободной памяти в качестве разделяемой памяти.

Можно ли назначить текущую область памяти в качестве общей памяти?

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

Вы используете shmat() для создания псевдонима совместно используемой памяти, которую вы создали, для любого произвольного диапазона, выровненного по страницам в вашем адресном пространстве

Так что это не занимает часть памяти, которая у вас уже естьи опубликовать его;он берет какую-то новую разделяемую память, затем вы копируете то, что хотите опубликовать, а затем используете shmat, чтобы создать псевдоним, где у вас было то, что вы хотели опубликовать - это имеет тот же эффект.

0 голосов
/ 08 сентября 2010

Сначала я бы посоветовал не использовать старые интерфейсы shmget, а более современные интерфейсы POSIX shm_open и mmap (если они у вас есть, вы не указали свою систему)

Затемmmap позволяет вам предложить адрес в вашем адресном пространстве, где вы хотели бы иметь сегмент

, это не совсем то, что вы запрашиваете, но я думаю, что ближайший вы можете получить

...