GlobalLock的发展历程:揭秘Win32系统演变之路?

2026-05-29 10:112阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计647个文字,预计阅读时间需要3分钟。

GlobalLock的发展历程:揭秘Win32系统演变之路?

至此后,你应该明白16位Windows的内存管理器是如何处理全局堆的。随着进入32位Windows的世界,GlobalAlloc会继续和以前一样模拟所有内存移动规则,但GlobalAlloc的返回值会不同。


至此,你应该明白16位Windows的内存管理器是如何处理全局堆了。是时候来进入32位的Windows的世界了。

到了32位之后,GlobalAlloc会继续和之前一样模拟所有内存移动规则,但是GlobalAlloc的返回值不再是一个选择子(Selector),因为在Win32中,处理器是运行在平坦地址模式(Flat Mode)。

GlobalLock的发展历程:揭秘Win32系统演变之路?

这意味着,之前缓存选择子并在底层重新分配内存的技法不再有效。

内存的移动性语义被完整地保留下来。内存块依然会有一个属性叫做锁定计数,即使它并没有什么意义,因为Win32系统从来都不会对内存进行压缩(请回忆一下,锁定计数是用来防止内存在压缩期间进行移动的一个属性)。

如果不是为了照顾GlobalFlags这个函数,可移动内存和锁定计数可以被完全地从系统中移除。GlobalFlags会返回一些奇怪的位信息模式,但现在这些信息都和内存不相关了,唯有锁定计数这一项信息。所以,锁定计数依然保留,以防止有一些应用程序会使用到它,或者一个程序会预期GlbalReAlloc会在一个已锁定的内存块上执行失败。

除此之外,一块可移动内存除了上述的开销之外,并不能给你带来什么其他的东西。

阅读全文

本文共计647个文字,预计阅读时间需要3分钟。

GlobalLock的发展历程:揭秘Win32系统演变之路?

至此后,你应该明白16位Windows的内存管理器是如何处理全局堆的。随着进入32位Windows的世界,GlobalAlloc会继续和以前一样模拟所有内存移动规则,但GlobalAlloc的返回值会不同。


至此,你应该明白16位Windows的内存管理器是如何处理全局堆了。是时候来进入32位的Windows的世界了。

到了32位之后,GlobalAlloc会继续和之前一样模拟所有内存移动规则,但是GlobalAlloc的返回值不再是一个选择子(Selector),因为在Win32中,处理器是运行在平坦地址模式(Flat Mode)。

GlobalLock的发展历程:揭秘Win32系统演变之路?

这意味着,之前缓存选择子并在底层重新分配内存的技法不再有效。

内存的移动性语义被完整地保留下来。内存块依然会有一个属性叫做锁定计数,即使它并没有什么意义,因为Win32系统从来都不会对内存进行压缩(请回忆一下,锁定计数是用来防止内存在压缩期间进行移动的一个属性)。

如果不是为了照顾GlobalFlags这个函数,可移动内存和锁定计数可以被完全地从系统中移除。GlobalFlags会返回一些奇怪的位信息模式,但现在这些信息都和内存不相关了,唯有锁定计数这一项信息。所以,锁定计数依然保留,以防止有一些应用程序会使用到它,或者一个程序会预期GlbalReAlloc会在一个已锁定的内存块上执行失败。

除此之外,一块可移动内存除了上述的开销之外,并不能给你带来什么其他的东西。

阅读全文