memory-management - 了解 WoW64 下如何管理内存

标签 memory-management operating-system kernel 32bit-64bit wow64

我们有六个网络应用程序需要作为 32 位进程运行,但由于我们正在缓存各种内容,因此需要相当多的内存,由于各种原因,这并不容易改变。没有一个应用程序需要超过 2GB,但总内存使用量将超过此。由于各种也不容易改变的原因,我们计划在一对具有 16GB RAM 的 64 位服务器上运行它们,这足以满足所有 Web 应用程序的组合内存需求。

这是我的担忧。据我了解,Windows为每个进程分配一个虚拟地址空间,在Win32上分配2GB用户空间和2GB内核空间,在Win64上分配8TB用户空间和8TB内核空间(大多数情况下)。然后,操作系统会处理该地址空间的哪些部分映射到物理 RAM。我还了解到 WoW64 子系统将处理在 64 位操作系统上运行 32 位进程。我不太了解 WoW64,不知道它是如何做到这一点的,我希望它能够映射不同 32 位进程的虚拟地址空间以利用所有可用的 RAM,但我担心它可能不会这样做并且该进程仍将争夺同一组 RAM,该 RAM 已以某种方式“标记”用于 32 位进程模拟。

我知道真正的解决方案是测试我们的目标环境和配置文件,看看发生了什么,但更多有关 WoW64 下如何管理物理 RAM 的信息会让人放心。

最佳答案

没有“耳标”32 位进程 RAM。物理 RAM 可供操作系统使用,并根据需要分配给进程,无论它们是 32 位还是 64 位。 Wow64 子系统不是虚拟机,也不是 32 位进程运行它的进程。 Wow64 子系统是一组填充程序库,用于处理 32 位到 64 位的转换,反之亦然。

关于memory-management - 了解 WoW64 下如何管理内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9208428/

相关文章:

java - 如果我将一个重物体作为参数传递给某个函数,成本是多少

memory-management - 什么是Dyon的内存模型?

python - os.rename 不起作用

android - Android 和未知重定位的 Hello world 内核模块 : 27 when insmod

matlab - 在没有簿记的情况下为 Matlab 表预分配内存?

android - 中国Android设备杀死后台服务

node.js - 从nodejs访问O_RDONLY,O_WRONLY,...

linux - 如何从内核中调用 default.target (systemd)

linux - 在家学习内核黑客和嵌入式开发?

c# - 尝试读取或写入 protected 内存。这通常表明其他内存已损坏