程序比较简单,注释也比较详细,不再做过多说明。
#include <iostream>
#include <windows.h>
//创建一个共享段Shared,一段变量放在单独的段中,
//系统不会再在同一个可执行或DLL的每一个实例中为
//它们创建新的实例了
#pragma data_seg("Shared")
unsigned count=0;
#pragma data_seg()
//告诉链接器共享这个段中的变量
#pragma comment(linker,"/SECTION:Shared,RWS")
int main()
{
std::cout<<"实例:"<<++count<<std::endl;
getchar();
return 0;
}
注意:
1.编译器只会将已初始化的变量放在我们创建的段中,如果变量未初始化,那么编译器就会将变量放到我们创建段之外的其它段中。
2.但是VC++提供了一个allocate声明符,它允许我们将未初始化的数据放到任何我们想要放的段中。
3.之所以要将变量放到一个单独的段中,最常见的原因也许就是为了在同一个DLL或exe的多个实例间共享变量。
4.默认情况下exe和DLL的每个实例都会有自己的一组变量。但是对于那些想要在多个实例间共享的变量,我们可以讲它们放在单独的段中。
5.一旦变量放在单独的段中,系统就不会再同一个可执行或DLL的每个实例中为它们创建实例了。
6.为了共享变量,仅仅告诉编译器把变量放到单独的段中是不够的。我们还必须告诉链接器要共享这个段中的变量。这可以同在链接器的命令行中使用/SECTION开关来实现。