#pragma data_seg用法

#pragma data_seg()

1#pragma data_seg()一般用于DLL中。 也就是说,在DLL中定义一个共享的,有名字的数据段。最关键的 是:这个数据段中的全局变量可以被多个进程共享。否则多个进程之间无法共享DLL中 的全局变量。

2共享数据必须初始化,否则微软编译器会把没有初始 化的数据放到.BSS段中,从而导致多个进程之间的共享行为失败。

3,你所谓的结果正确是一种错觉。如果你在一个DLL中这么写:

#pragma data_seg("MyData")

int g_Value; // Note that the global is not initialized.

#pragma data_seg()

DLL
提供两个接口函数:

int GetValue()
{
     return g_Value;
}

void SetValue(int n)
{
     g_Value = n;
}

然后启动两个进程ABAB都调用 了这个DLL, 假如A调用了SetValue(5); B接着调用int m = GetValue(); 那么m的值不 一定是5,而 是一个未定义的值。因为DLL中的全局数据对于每一个调用它的进程而言,是私有的,不能共享的。假如你对g_Value进行了初始化,那么g_Value就一定会被放进MyData段中。换句话说,如果A调用了SetValue(5); B接着调用int m = GetValue(); 那么m的值就一定是5!这就实现了跨进程之间的数据通信!

你可能感兴趣的:(#pragma data_seg用法)