GlobalAllocPtr()始终为不同的Process返回相同的地址

mic*_*yue 3 c++ windows winapi

我有一个可以在Windows上同时启动多次的应用程序.

在这个应用程序中,我们在开始时调用GlobalAllocPtr()来分配内存,如下所示:

// allocate a structure
LPSlcDataMgr lpMgr = (LPSlcDataMgr)GlobalAllocPtr(GHND, sizeof(TSlcDataMgr));
Run Code Online (Sandbox Code Playgroud)

我们在两台机器上测试过(两者都是XP专业版2002,一台是SP2,另一台是SP3),但在SP3上,我们的应用程序会随机崩溃

经过调查,我们发现:

  1. 在SP3上,GlobalAllocPtr()始终为不同的应用程序进程返回相同的地址
  2. 但在SP2上,没关系,为每个进程返回不同的地址

是否有可能GlobalAllocPtr()在WinXP SP3上返回相同的地址是我们崩溃的直接或间接原因?

提前致谢.

jal*_*alf 6

在过去的15年或更长时间里,每个理智的操作系统都使用了虚拟内存.每个进程都有一个完整的虚拟地址空间给自己.因此,两个不同的进程可以指向同一地址,没有任何问题或冲突.他们从不会看到彼此的数据,因为他们每个人都有自己的地址"副本"和其他地址.

这就是操作系统的工作原理,除非您正在编写内核模式驱动程序,否则您不需要知道底层物理地址是什么,并且您通常不知道底层物理地址是什么.

不,这不会导致崩溃.你的问题是别的.