gpt4 book ai didi

c++ - GlobalAllocPtr() 总是为不同的进程返回相同的地址

转载 作者:可可西里 更新时间:2023-11-01 14:41:32 25 4
gpt4 key购买 nike

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

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

// allocate a structure
LPSlcDataMgr lpMgr = (LPSlcDataMgr)GlobalAllocPtr(GHND, sizeof(TSlcDataMgr));

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

经过调查,我们发现:

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

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

提前致谢。

最佳答案

在过去的 15 年或更长时间里,每个正常的操作系统都使用了虚拟内存。每个进程都有一个完整的虚拟地址空间属于自己。因此,两个不同的进程可以拥有指向同一地址的指针,而不会出现任何问题或冲突。他们永远不会看到彼此的数据,因为他们每个人都有自己的地址“拷贝”,以及所有其他地址。

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

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

关于c++ - GlobalAllocPtr() 总是为不同的进程返回相同的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com