Различия между общим объектом и обычной библиотекой в ​​Linux - PullRequest
2 голосов
/ 04 октября 2010

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

1 Ответ

2 голосов
/ 04 октября 2010

Переменные не распределяются между программами, никогда. (Хотя специально выделенная разделяемая память может использоваться совместно, это «объект», а не «переменная» в терминологии C.) Вы смущены тем, что на диске поддержка - это то, что совместно используется процессы, и это то же самое, будь то основная программа (статическая или динамическая связь) или файл общей библиотеки. Реализация виртуальной памяти операционной системы заботится об использовании одной и той же страницы физической памяти для нескольких процессов, когда содержимое не отличается от содержимого на диске, и создании физических дубликатов страниц во время выполнения, если они записаны. Все это прозрачно для вашего приложения, которое видит линейное 32- или 64-битное адресное пространство, состоящее только из собственного кода и данных.

На практике система динамической компоновки выполняет ряд оптимизаций хранилища, которые изолируют данные, которые будут изменены для каждого процесса, до нескольких страниц, что позволяет разделить подавляющее большинство страниц между процессами, использующими один и тот же исполняемый файл или одни и те же библиотеки.

...