一个dll 被多个exe加载后,因为有copy-on-write机制,里面的全局变量是不会被相互影响的,但如果想让他们相互影响,可以使用
- #pragma data_seg("Shared")
- int g_data=3;
- #pragma data_seg()
- #pragma comment(linker,"/section:Shared,rws")
这种写法。同理一个exe有多个实例时,如果有共享段,也将会共享数据。
note:
初学者可能会误认为共享节是 exe与被 调用dll共享全局变量使用的。其实不是这样的。一个dll中如果使用了共享节,任何加载它的exe都会共享共享节中的数据。 同理一个exe中如果有共享节。再次运行时也会共享。