作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个可以在 Windows 上同时启动多次的应用程序。
在这个应用程序中,一开始我们调用GlobalAllocPtr()来分配内存,如下所示:
// allocate a structure
LPSlcDataMgr lpMgr = (LPSlcDataMgr)GlobalAllocPtr(GHND, sizeof(TSlcDataMgr));
我们在两台机器上测试(都是XP professional 2002,一台是SP2,一台是SP3)但是在 SP3 上,我们的应用程序会随机崩溃
经过调查,我们发现:
GlobalAllocPtr()
始终为不同的应用程序进程返回相同的地址在 WinXP SP3 上返回相同地址的 GlobalAllocPtr()
是否可能是我们崩溃的直接或间接原因?
提前致谢。
最佳答案
在过去的 15 年或更长时间里,每个正常的操作系统都使用了虚拟内存。每个进程都有一个完整的虚拟地址空间属于自己。因此,两个不同的进程可以拥有指向同一地址的指针,而不会出现任何问题或冲突。他们永远不会看到彼此的数据,因为他们每个人都有自己的地址“拷贝”,以及所有其他地址。
这就是操作系统的工作方式,除非您正在编写内核模式驱动程序,否则您不需要知道底层物理地址是什么,而且您通常不知道底层物理地址是什么。
不,这不会导致崩溃。你的问题是别的。
关于c++ - GlobalAllocPtr() 总是为不同的进程返回相同的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259649/
我有一个可以在 Windows 上同时启动多次的应用程序。 在这个应用程序中,一开始我们调用GlobalAllocPtr()来分配内存,如下所示: // allocate a structure LP
我是一名优秀的程序员,十分优秀!