Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ DLL中C样式函数中的静态变量_C++_C_Dll_Static - Fatal编程技术网

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

C++ DLL中C样式函数中的静态变量,c++,c,dll,static,C++,C,Dll,Static,假设DLL中存在这样一个函数: const Object *Get( void ) { static Object instance; return &instance; } 此静态对象将位于内存中的什么位置?如果从多个其他DLL调用此函数,是否会存在此静态对象的多个副本?除非您采取明确的操作,否则我怀疑它会出现在可执行文件的.bss部分或.data部分。映射时,这些将使用写时复制语义进行映射 如果希望共享,则需要告诉编译器将其放置在具有shared属性的节中。这样做的Visu

假设DLL中存在这样一个函数:

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

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

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

如果希望共享,则需要告诉编译器将其放置在具有
shared
属性的节中。这样做的VisualC++代码看起来像下面这样。

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

const Object *Get( void )
{
  return &instance;
}
我不知道在函数中声明静态变量时是否可以使用
\uu declspec


<> >更多的文档

你应该指出,<>代码> yxDEXSPEC是微软Visual C++扩展。我不确定这与我原来的问题有什么关系?我确实希望静态变量存在于内存中的一个位置,并在DLL之间共享它,但我不明白这有什么帮助?@RandyGaul查看一下关于写时复制的描述。如果您了解了,它也会有所帮助,因为我认为您想要共享的是物理页面,而不是虚拟内存地址。