一般而言微软编译器会把所有初始化过的数据放进一个名为 .data 的 section 中,然后留给它一个 image_scn_mem_shared 以外的属性。这会使得每当有一个执行个体(instance)产生,该数据就会复制一份数据,专属给执行个体使用。为了共享内存,你可以要求编译器产生一个新的section,名称随你取,但只有前8个字符有意义。例如:
#pragma data_seg("sharedat")
在 #pragma 之后,你可以宣告任何你想要被共享的数据变量。你应该初始化这些数据,否则它们会被编译器放到另一个专放未初始化资料的 data section 去。变量宣告完之后,如果你要恢复原来的 data section 属性,只要加上一行即可:
#pragma data_seg()
最后,你必须将你的共享心愿传达给联结器知道。你有两种方法,传统作法是在def 檔中设定 section 属性:
sections
sharedat read write shared