DLL中C风格函数的静态变量

时间:2013-09-08 03:27:12

标签: c++ c dll static

假设DLL中存在一个函数,如下所示:

const Object *Get( void )
{
  static Object instance;
  return &instance;
}

这个静态对象在内存中的位置是什么?如果从多个其他DLL调用此函数,是否会存在多个此静态对象的副本?

1 个答案:

答案 0 :(得分:1)

除非您采取明确的措施,否则我会怀疑它会在您的可执行文件的.bss部分或.data部分中结束。映射时,这些映射使用copy-on-write语义。

如果您希望共享它,您需要告诉编译器将其放在具有shared属性的部分中。执行此操作的Visual C ++代码如下所示。

#pragma section("mysec",read,write,shared)
__declspec(allocate("mysec")) Object instance = 0;

const Object *Get( void )
{
  return &instance;
}

我不知道在函数内部声明静态变量时是否可以使用__declspec

更多文档here