Ответ 1
В системах на основе Unix (включая Linux) сегмент кода (.text) может совместно использоваться несколькими процессами, поскольку он неизменен. Вы упомянули это частично?
По сути, каждая разделяемая библиотека, которая содержит статические данные (например, глобальные переменные), имеет глобальную таблицу смещений (GOT). В разделяемых библиотеках все ссылки на статические данные (например, глобальные переменные) происходят через GOT (они косвенные). Таким образом, даже если сегмент кода совместно используется несколькими процессами, каждый процесс имеет свое исключительное отображение других сегментов совместно используемой библиотеки, включая соответствующий GOT, чьи записи перемещаются соответствующим образом.
Короче говоря, между процессами используется только код, а не данные. Тем не менее, я думаю, что константы могут быть исключением в зависимости от флагов компиляции.
Я также рекомендую главу 10 "Динамическое связывание и загрузка" из следующей книги: " Линкеры и загрузчики".