Что происходит с глобальными и статическими переменными в разделяемой библиотеке, когда она динамически связана?

Я пытаюсь понять, что происходит, когда модули с глобальными и статическими переменными динамически связаны с приложением. Под модулями я подразумеваю каждый проект в решении (я много работаю с visual studio!). Эти модули либо встроены в * .lib или * .dll, либо в сам файл * .exe.

Я понимаю, что двоичный файл приложения содержит глобальные и статические данные всех отдельных единиц перевода (объектных файлов) в сегменте данных (и сегмент данных только для чтения, если const).

Что происходит, когда это приложение использует модуль A с динамическим связыванием во время загрузки? Я предполагаю, что в DLL есть раздел для глобальных переменных и статики. Загружает ли их операционная система? Если так, куда они загружаются?

И что происходит, когда приложение использует модуль B с динамическим связыванием во время выполнения?

Если в моем приложении есть два модуля, в которых оба используют A и B, создаются ли копии глобалов A и B, как указано ниже (если это разные процессы)?

Получают ли библиотеки A и B доступ к глобальным переменным приложений?

(Пожалуйста, укажите также свои причины)

Цитировать изMSDN:

Переменные, которые объявлены как глобальные в файле исходного кода DLL, обрабатываются компилятором и компоновщиком как глобальные переменные, но каждый процесс, который загружает данную DLL, получает свою собственную копию глобальных переменных этой DLL. Область действия статических переменных ограничена блоком, в котором объявлены статические переменные. В результате каждый процесс по умолчанию имеет свой собственный экземпляр глобальных и статических переменных DLL.

и изВот:

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

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос