可能你曾经听一些所谓的 win32 权威人士说过,在 windows 95 或 nt 中共享内存的唯一方法就是使用内存映像文件(memory mapped file)。那的确是一个方法,但不是唯一方法。如果你只是想在同一程序的不同执行个体(instance)中分享小量的内存,杀鸡何必用牛刀?虽然本书把焦点放在程序与程序之间的可读/可写数据的共享,但是别忘了,4gb 地址空间有一半保留给系统使用,它们总是可以被所有行程共享。
从低层来说,所谓内存共享,只不过就是把一页页的 ram 映射到一个以上的行程位址空间中。这些ram 可以被映像到相同的线性地址,也可以被映像到不同的线性地址。在 windows 95 中,经由内存映像文件(memory mapped file)而完成的内存共享区域,总是在不同的行程中有着相同的线性地址。稍后的 phys 程序会揭露此一事实。然而,在你的 win32 程序中做此假设是很危险的,因为 windows nt 并不保证内存映像文件在每一个行程中有相同的线性地址。许多 win32 程序设计书籍都涵盖有内存映像文件这个主题,所以我不打算在这里说太多。