Есть ли какой-нибудь возможный способ изменить расположение памяти на общую память в C?
В c вы можете сделать
shmid = shmget(SHMEM_KEY, sizeof(int*) * n , SHEMEM_MODE | IPC_CREAT);
int* shmem = shmat(shmid, NULL, 0);
назначить сначала предоставленную свободную область памяти в качестве разделяемой памяти.
Есть ли способ назначить текущее пространство памяти в качестве общей памяти?
2 ответа
Ты используешь shmat()
псевдоним общей памяти, которую вы создали, к любому произвольному диапазону выравнивания страниц в вашем адресном пространстве
Так что это не займет у вас памяти, которая у вас уже есть, и опубликовать ее; Это занимает некоторую новую общую память, затем вы копируете то, что хотите опубликовать, а затем используете shmat
псевдоним, где у вас было то, что вы хотели опубликовать - это имеет тот же эффект.
Сначала я бы посоветовал не использовать старое shmget
интерфейсы, но более современные интерфейсы POSIX shm_open
а также mmap
(если они у вас есть, вы не указали свою систему)
Тогда mmap
позволяет вам предложить адрес в вашем адресном пространстве, где вы хотели бы иметь сегмент
это не совсем то, о чем вы просите, но, думаю, самое близкое, что вы можете получить