Как реализовать глобальную переменную процесса в C ++? - PullRequest
2 голосов
/ 22 марта 2009

Обычно использование переменной в файле .cpp приводит к глобальной доступности переменной, например:

.h file:
extern int myGlobal;
void work();

.cpp file:
int myGlobal = 42;
void work(){ myGlobal++; }

Когда файл .cpp помещается в статическую библиотеку и более одной общей библиотеки (DLL) или исполняемых ссылок на статическую библиотеку, у каждой есть собственная копия myGlobal. work () изменил бы свою собственную версию переменной.

Мой вопрос сейчас: есть ли способ получить уникальную переменную всего процесса или указатель на эту переменную? Похоже, какое локальное хранилище было бы для переменных всего потока. Он не должен быть независимым от платформы. Бонусные баллы, если он работает в Win32:)

Ответы [ 4 ]

4 голосов
/ 22 марта 2009

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

3 голосов
/ 22 марта 2009

Либо не статически ссылаться на него (вставьте myGlobal в DLL), либо связывайтесь только со статической библиотекой один раз (потенциально боль в шее достигается).

0 голосов
/ 22 марта 2009

Возможно, это излишне для одного процесса, но я использовал общие разделы для достижения чего-то похожего на то, что вы описываете.

0 голосов
/ 22 марта 2009

Я предлагаю вам взглянуть на Boost.Interprocess, в частности на этой странице о совместном использовании памяти между несколькими процессами. Там вы можете найти, как использовать эту библиотеку для создания общего пространства памяти, открыть уже созданное (фактически «открыть или создать»), изменить его размер в соответствии с вашими потребностями и получить к нему доступ. Вот простой пример, который должен помочь вам довольно быстро.

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