类里面定义一个静态变量(static),几个动态库都访问它

cmchao 2009-09-22 09:14:08
类里面定义一个静态变量(static),不同的几个动态库都访问它,请问访问的都是同一个空间吗? 如:

class  __declspec( dllexport )   PathManager
{
private:
static PathManager* mManager;

public:
static PathManager* GetSingleInstance()
{
if (mManager == NULL)
mManager = new NGPSManager();
return mManager;
}

}
#define gPathManager (PathManager::GetSingleInstance())

几个动态库都调用了gPathManager ,都是访问同一内存空间吗?
...全文
428 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
oLINo 2009-09-22
  • 打赏
  • 举报
回复
每个进程空间独享一份
lwykj 2009-09-22
  • 打赏
  • 举报
回复
如果是不同进程 肯定不同的!
如果在dll 里面要共享内存 要单独做设置!
晨星 2009-09-22
  • 打赏
  • 举报
回复
对不起,偶说错了。如果不做特殊处理,仍然是各个进程用各自己的,即不止有一份,而是每个进程都有自己的一份。
至于怎样才能让所有的进程共享一份静态数据,《Programming Windows》上讲dll的那章曾提到。
晨星 2009-09-22
  • 打赏
  • 举报
回复
如果你这个静态变量所在的项目也被编译成dll,而且确保其它的各个dll使用此dll时用的都是同一份,那就是一份,否则难说。
nodiebirdcomeback 2009-09-22
  • 打赏
  • 举报
回复
我说的是不同进程空间,同一进程是相同的。
nodiebirdcomeback 2009-09-22
  • 打赏
  • 举报
回复
不一定,进程的空间即使是地址绝对值相同,但是它们的物理位置还是不一样的,
除非你的空间是在DLL里面声明为一个共享空间。
xwsn007 2009-09-22
  • 打赏
  • 举报
回复
再说一下,一个exe不管加载多少dll,他们都属同一个进程,而全局存储区和堆都是进程级别的,即一个进程
内的各module公用。栈存储区是线程级别的,每个线程都有自己的栈。
reneeland 2009-09-22
  • 打赏
  • 举报
回复
我觉得应该是~~~
xwsn007 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lwykj 的回复:]
如果是不同进程 肯定不同的!
如果在dll 里面要共享内存 要单独做设置!
[/Quote]

同意这个,如果调用gPathManager的那几个dll都被同一个exe调用,则是一份。否则不行。
bragi523 2009-09-22
  • 打赏
  • 举报
回复
是吧
bdzwj 2009-09-22
  • 打赏
  • 举报
回复
肯定不是, 每个DLL都会创建一个副本。
  • 打赏
  • 举报
回复
你试试不就知道了么
尘雨 2009-09-22
  • 打赏
  • 举报
回复
嗯,基于进程的,标注一下

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧