通常在.cpp文件中使用变量会导致变量全局可用,如下所示:
.h file:
extern int myGlobal;
void work();
.cpp file:
int myGlobal = 42;
void work(){ myGlobal++; }
当.cpp文件放在静态库和多个共享库(DLL)或针对静态库的可执行链接时,每个文件都有自己的myGlobal
副本。 work()会修改自己的变量版本。
我现在的问题是:有没有办法获得一个进程范围的唯一变量或指向该变量的指针?类似于线程局部存储将用于线程范围的变量。它不必与平台无关。奖励积分如果在Win32中有效:)
答案 0 :(得分:4)
简单:使进程中的所有DLL链接到暴露变量的单个DLL。
答案 1 :(得分:3)
要么不静态链接到它(在DLL中粘贴myGlobal),要么只链接一次静态库(可能更容易实现颈部疼痛)。
答案 2 :(得分:0)
我建议你看看Boost.Interprocess,特别是this page关于在多个进程之间共享内存的问题。在那里,您可以找到如何使用此库创建共享内存空间,打开已创建的内存空间(实际上是“打开或创建”),根据需要调整其大小并访问它。有一个简单的例子可以让你走得很快。
答案 3 :(得分:0)
对于单个进程来说,这可能有点过分,但我使用shared sections来实现类似于您描述的内容。