C++ DLL中C样式函数中的静态变量
假设DLL中存在这样一个函数: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
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查看一下关于写时复制的描述。如果您了解了,它也会有所帮助,因为我认为您想要共享的是物理页面,而不是虚拟内存地址。