DLL 中 C 样式函数中的静态变量

Static Variable in C-Style Function within DLL

本文关键字:静态 变量 样式 DLL 函数      更新时间:2023-10-16

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

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

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

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

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

#pragma section("mysec",read,write,shared)
__declspec(allocate("mysec")) Object instance = 0;
const Object *Get( void )
{
  return &instance;
}

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

更多文档在这里