如何在C ++中实现进程全局变量?

时间:2009-03-21 21:00:11

标签: c++

通常在.cpp文件中使用变量会导致变量全局可用,如下所示:

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

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

当.cpp文件放在静态库和多个共享库(DLL)或针对静态库的可执行链接时,每个文件都有自己的myGlobal副本。 work()会修改自己的变量版本。

我现在的问题是:有没有办法获得一个进程范围的唯一变量或指向该变量的指针?类似于线程局部存储将用于线程范围的变量。它不必与平台无关。奖励积分如果在Win32中有效:)

4 个答案:

答案 0 :(得分:4)

简单:使进程中的所有DLL链接到暴露变量的单个DLL。

答案 1 :(得分:3)

要么不静态链接到它(在DLL中粘贴myGlobal),要么只链接一次静态库(可能更容易实现颈部疼痛)。

答案 2 :(得分:0)

我建议你看看Boost.Interprocess,特别是this page关于在多个进程之间共享内存的问题。在那里,您可以找到如何使用此库创建共享内存空间,打开已创建的内存空间(实际上是“打开或创建”),根据需要调整其大小并访问它。有一个简单的例子可以让你走得很快。

答案 3 :(得分:0)

对于单个进程来说,这可能有点过分,但我使用shared sections来实现类似于您描述的内容。