GlobalLock的发展历程:揭秘Win32系统演变之路?
- 内容介绍
- 文章标签
- 相关推荐
本文共计647个文字,预计阅读时间需要3分钟。
至此后,你应该明白16位Windows的内存管理器是如何处理全局堆的。随着进入32位Windows的世界,GlobalAlloc会继续和以前一样模拟所有内存移动规则,但GlobalAlloc的返回值会不同。
至此,你应该明白16位Windows的内存管理器是如何处理全局堆了。是时候来进入32位的Windows的世界了。
到了32位之后,GlobalAlloc会继续和之前一样模拟所有内存移动规则,但是GlobalAlloc的返回值不再是一个选择子(Selector),因为在Win32中,处理器是运行在平坦地址模式(Flat Mode)。
这意味着,之前缓存选择子并在底层重新分配内存的技法不再有效。
内存的移动性语义被完整地保留下来。内存块依然会有一个属性叫做锁定计数,即使它并没有什么意义,因为Win32系统从来都不会对内存进行压缩(请回忆一下,锁定计数是用来防止内存在压缩期间进行移动的一个属性)。
如果不是为了照顾GlobalFlags这个函数,可移动内存和锁定计数可以被完全地从系统中移除。GlobalFlags会返回一些奇怪的位信息模式,但现在这些信息都和内存不相关了,唯有锁定计数这一项信息。所以,锁定计数依然保留,以防止有一些应用程序会使用到它,或者一个程序会预期GlbalReAlloc会在一个已锁定的内存块上执行失败。
除此之外,一块可移动内存除了上述的开销之外,并不能给你带来什么其他的东西。
本文共计647个文字,预计阅读时间需要3分钟。
至此后,你应该明白16位Windows的内存管理器是如何处理全局堆的。随着进入32位Windows的世界,GlobalAlloc会继续和以前一样模拟所有内存移动规则,但GlobalAlloc的返回值会不同。
至此,你应该明白16位Windows的内存管理器是如何处理全局堆了。是时候来进入32位的Windows的世界了。
到了32位之后,GlobalAlloc会继续和之前一样模拟所有内存移动规则,但是GlobalAlloc的返回值不再是一个选择子(Selector),因为在Win32中,处理器是运行在平坦地址模式(Flat Mode)。
这意味着,之前缓存选择子并在底层重新分配内存的技法不再有效。
内存的移动性语义被完整地保留下来。内存块依然会有一个属性叫做锁定计数,即使它并没有什么意义,因为Win32系统从来都不会对内存进行压缩(请回忆一下,锁定计数是用来防止内存在压缩期间进行移动的一个属性)。
如果不是为了照顾GlobalFlags这个函数,可移动内存和锁定计数可以被完全地从系统中移除。GlobalFlags会返回一些奇怪的位信息模式,但现在这些信息都和内存不相关了,唯有锁定计数这一项信息。所以,锁定计数依然保留,以防止有一些应用程序会使用到它,或者一个程序会预期GlbalReAlloc会在一个已锁定的内存块上执行失败。
除此之外,一块可移动内存除了上述的开销之外,并不能给你带来什么其他的东西。

