GloBal 和 Local 函数是为了支持从 16-bit 移植过来的代码,或者为了兼容16-bit windows 的源码。从32-bit windows开始,Global 和 Local 函数是使用进程默认堆,封装heap 函数实现的。因此,Global 和 Local 函数比其它的内存管理方式有更大的开销。
heap 函数比Global 和 Local 函数提供了更多的特性和控制,如果没有特别需要Global 和 Local 函数(特定的应用场景),新开发的应用程序应该使用Heap 函数。例如,一些Windows 函数申请的内存必须使用LocalFree 释放,Global 函数依然在DDE、剪贴板、OLE 数据对象中使用。此连接中包含内存管理函数的应用场景
https://msdn.microsoft.com/zh-cn/library/windows/desktop/aa366781(v=vs.85).aspx
windows 内存管理并不像16-bit windows 提供分开的本地堆和全局堆的申请。因此选择Local 还是 Global 是个人的选择问题。由于16-bit 段内存管理到32-bit 虚拟内存管理的转变,一些相关的Global 和 Local 函数和它们的一些可选属性都变得不必要或者没有意义。例如,由于Global 和 Local 函数都返回32-bit 地址,这里没有near 和 far 的概念。
使用Global 和 Local 申请的内存对象是具有可读写属性的私有提交页面,其它的进程不可以访问,使用GMEM_DDESHARE 标志调用GlobalAlloc 申请的内存并不能像在16-bit 下一样被所有的进程访问。保留该参数,仅仅是为了兼容性。