Ответ 1
Простой ответ: нет простого способа.
Причины довольно логичны. Общая память привязывается к виртуальному пространству каждого процесса индивидуально. Каждый процесс имеет собственное виртуальное адресное пространство. Каждый процесс может свободно привязывать сегмент к любому (не буквально, выравниванию устанавливает некоторые ограничения) произвольный адрес. Как система может гарантировать, что, скажем, путем расширения области на 4MiB, каждый "пользователь" этого сегмента сможет соответствовать блоку "большой" в том же стартовом адресе, где ранее был меньший сегмент?
Но вы не должны сдаваться! Вы можете быть творческими. Вы можете придумать один сегмент заголовка, в котором вы храните информацию о реальном сегменте полезной нагрузки. Вы можете сделать каждый процесс подчиненным некоторым правилам, например: повторно подключить сегмент полезной нагрузки, когда его идентификатор, как описано в сегменте заголовка, не соответствует известному.
Совет: я подозреваю, что вы это знаете, но никогда не держите указатели на данные в общей области, только смещение.
Надеюсь, у вас будет какая-то польза от моей тарабарщины.