Это то, что я прочитал в книге «LINUX интерфейс программирования»:
В большинстве реализаций UNIX, когда отображение было создано, его местонахождение и размер не может быть изменен. Однако Linux предоставляет системный вызов (nonportable) mremap() , который допускает такие изменения. - Так что это в первую очередь зависит от того, какая ОС вы есть.
На LINUX Это возможно, на основе документации:
void *mremap(void *old_address, size_t old_size,
size_t new_size, int flags, ... /* void *new_address */);
мы должны предоставить старые и новые размеры.
Но есть некоторые ограничения и сценарии, в которых эта операция может не иметь никаких последствий или ошибок при броске. Просьба ознакомиться с документацией: http://man7.org/linux/man-pages/man2/mremap.2.html
(НА LINUX) В то же время я не видел никаких ограничений от детского/другого процесса. Я понимаю, что если вы можете получить адрес общей памяти и если он создан без каких-либо блокировок, и процесс, который пытается изменить общую память, потребовал привилегий, я думаю, что размер может быть увеличен.
Я не могу удалить свой предыдущий комментарий. В любом случае, спасибо за хороший ответ! Однако, если адрес в общей памяти изменится, дети больше не смогут получить к нему доступ. Возможно, есть способ заставить повторное использование адреса? –
Может быть. Сначала я думал, что это невозможно. – Naidu
В соответствии с [Kernel Bug Tracker] (https://bugzilla.kernel.org/show_bug.cgi?id=8691) 'mremap' с' MAP_SHARED' не поддерживается. – nwellnhof