глобальная переменная, определенная в dll и глобальная переменная программного обеспечения хоста - PullRequest
2 голосов
/ 10 апреля 2011

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

Ответы [ 3 ]

3 голосов
/ 10 апреля 2011

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

3 голосов
/ 10 апреля 2011

Ответ - да.Цитата MSDN: «Каждый процесс, который загружает DLL, отображает ее в свое виртуальное адресное пространство».Перейдите по этой ссылке , и вы найдете ответ на свой вопрос.Удачи

0 голосов
/ 10 апреля 2011

Ваш тег указывает на C ++, но ответ также может зависеть от платформы / ОС. Под окнами каждый процесс сделает копию данных. Вот фрагмент из статьи Поведение во время выполнения MSDN :

Каждый раз, когда новый процесс пытается использовать DLL, операционную систему создает отдельную копию библиотеки DLL данные: это называется процессом присоединения.

В одном процессе глобальные данные - это хорошо, ... глобально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...