Совместное использование общего объекта между несколькими процессами

Загружаются ли общие объекты отдельно для каждого процесса или один общий объект является общим для них? Например, предположим, что какая-то программа использует libc.so. Затем запускаются два процесса этой программы. Будет ли этот общий объект загружаться ДВА раза для каждого процесса в их области памяти ИЛИ он будет загружаться где-то в памяти ОДИН РАЗ и отображаться в памяти двух процессов?


person scdmb    schedule 23.07.2012    source источник
comment
Общие объекты называются общими не просто так.   -  person n. 1.8e9-where's-my-share m.    schedule 23.07.2012


Ответы (2)


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

person ninjalj    schedule 23.07.2012

Проверьте этот поток. Теоретически каждый процесс имеет собственное адресное пространство, и для этой цели должны использоваться потоки, но это вопрос реализации системы.

person Dominik G    schedule 23.07.2012