- #pragma data_seg("share")
- int g_nInstance = 0;
- #pragma data_seg()
- #pragma comment(linker, "/SECTION:share,RWS")
这段代码可以让所有的应用程序实例共享变量g_nInstance。
其原理很简单,当某一进程开启时,操作系统都会为其分配地址空间。在这个空间中,有代码段,数据段等。程序中的所有数据都会放在数据段中,然而,操作系统为了保护硬盘数据会有一个copy-on-write的操作,因此,相同程序的多个实例无法共享程序中的全局变量和静态变量。
为了解决此问题,而又不影响其他段中的数据保护,可以在进程的地址空间中新建一个自己的段"share"
代码: #pragma data_seg("share")
#pragma data_seg()
在 段中申明一个全局变量(这个全局变量确实很全局,能够被所有实例访问),然后设置此段的访问属性
#pragma comment(linker, "/SECTION:share,RWS")
如此即可。
注:在段中申明的变量必须初始化,否则视为在段外。
问题:
#pragma data_seg("share")
#pragma data_seg()
__declspec(allocate("share")) int g_nInstance;
这东西如何初始化,如果我在main函数中初始化,那 岂不是每个实例运行的时候都会将其清零??
2.在.h中如下代码
#pragma data_seg("share")
#pragma data_seg()
__declspec(allocate("share"))extern int g_nInstance;
在.cpp文件中g_nInstance =0;
但是如此行事却无法实现
今日无时间实验,明日再来