2

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

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

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

4

1 回答 1

1

除非您采取明确的行动,否则我怀疑它最终会出现在可执行文件的.bss部分或.data部分中。映射时,这些映射使用写时复制语义。

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

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

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

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

更多文档在这里

于 2013-09-08T03:46:52.493 回答