上下文
我在使用C / Win32 API中的32位Windows应用程序的剪贴板实现时遇到了这个疑问。
我们知道Windows经典剪贴板API希望我们传递一个应该是全局和共享的内存块(以便可以跨进程边界访问它)。 MSDN / Web上的大多数示例都将GlobalAlloc(..)API返回的句柄传递给它。
现在正如MSDN所述,并由RaymondC在其博客series中解释:
从32位Windows开始,GlobalAlloc()..和LocalAlloc()实现为包装函数,使用进程的默认堆的句柄调用HeapAlloc。因此,GlobalAlloc和LocalAlloc比HeapAlloc具有更大的开销。
我怀疑:
我理解这一切都归结为从进程的本地堆分配内存。但我无法理解的是......当上下文切换时,这将如何工作?我的意思是现有流程的PD / PTE将被更新以处理切换,然后这些页面/分配的内存将不再指向相同的物理内存。
在阅读MSDN之前,我假设GlobalAlloc(..)将在内核空间中分配内存。但我仍然无法理解如何分享内存。
相关疑问:何时以及何时会释放内存块?
此外,如果有人可以指向包含有关相同内容的详细信息的来源/文档,那将是非常有用的,这样我就可以一劳永逸地揭开它的神秘面纱。