在可执行文件或DLL的多个实例之间共享静态数据

来源:互联网 发布:淘宝店怎么代理加盟 编辑:程序博客网 时间:2024/05/30 23:19

全局数据和静态数据不能被同一个.exeDLL文件的多个映像共享,这是个安全的默认设置。每个.exeDLL文件的映像都由许多节组成。按照规定,每个标准节的名字均以圆点开头。例如,当编译你的程序时,编译器会将所有代码放入一个名叫.text的节中。该编译器还将所有未经初始化的数据放入一个.bss节,而已经初始化的所有数据则放入.data节中。

每一节都拥有与其相关的一组属性,这些属性如下所示。

.exeDLL文件各节的属性

属性含义

READ

该节中的字节可以读取

WRITE

该节中的字节可以写入

EXECUTE

该节中的字节可以执行

SHARED

该节中的字节可以被多个实例共享(本属性能够有效地关闭copy-on-write机制)


使用
MicrosoftVisual StudioDumpBin实用程序(带有/Headers开关),可以查看.exeDLL映射文件中各个节的列表.

除了编译器和链接程序创建的标准节外,也可以在使用下面的命令进行编译时创建自己的节:

#pragma data_seg( "MyShared" )
int gCount = 0;
#pragma data_seg()

#pragma comment(linker, "/SECTION:MyShared,rws")