2010-10-04 2 views
2

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

ответ

2

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

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

+0

Спасибо за ваш ответ, если я правильно ответил, переменные сначала разделяются, а затем, если процесс хочет их изменить, они отображаются в пространство адресов процессов. правильно? –

+2

Нам нужно быть осторожными, когда мы говорим, что переменные являются общими. Общий объект может иметь в нем переменные. Процесс, который использует эту общую библиотеку, будет иметь свою собственную копию переменной. И.Е. prog-A и prog-B могут использовать одну и ту же разделяемую библиотеку. Они будут иметь копии переменной foo из общей библиотеки, но prog-A foo отличается от foo prog-B. –

+0

Сказанное выше, есть также концепция общей памяти. Общая память может быть создана и использована любым процессом, с или без общих объектов. Это разные концепции, которые «разделяли» их имена. Общая память - это, по существу, именованная область памяти, которую процессы могут отображать в их виртуальное адресное пространство. Общая память может использоваться для обмена данными между двумя различными процессами. –

Смежные вопросы