为什么 64 位机器上会出现内存碎片问题?

2023-12-23

在 32 位机器中,每个进程获得 4GB 的虚拟空间。在这种情况下,人们可能会担心我们可能会因为碎片化而遇到麻烦。但对于 64 位机器,理论上我们拥有巨大的可寻址虚拟内存,那么为什么内存碎片在 64 位机器中仍然是一个问题(如果有的话)?


您尝试访问的每个虚拟地址都会由操作系统映射到物理内存。物理内存以页为单位分配(例如大小为 4K)。如果您设法在偏移量 1000000*n 处分配一个字节,并为 n 从 1 到 1000000 执行此操作(我认为您could使用 mmap 来做到这一点),那么操作系统将不得不用一百万来支持它pages物理内存,类似于 4G。该物理内存将不可用于其他任何用途。如果连续分配字节,则您的百万字节只需要大约 1M 物理内存(256 页)。

如果出于合法原因分配 4G,然后释放其中的一部分,保留每个已分配页面的一点,您可能会遇到类似的糟糕情况。操作系统实际上无法将释放的内存重新用于其他用途,因为没有完全空闲的物理页。所以这就是一个碎片问题。

理论上,您可以想象虚拟地址 1000000 和 2000000 将映射到物理内存的同一页,从而避免碎片。但实际上,出于充分的理由,虚拟内存映射是逐页完成的。你可以在这里读更多关于它的内容:http://en.wikipedia.org/wiki/Page_table http://en.wikipedia.org/wiki/Page_table.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 64 位机器上会出现内存碎片问题? 的相关文章

随机推荐

  • Xcode 需要很长时间才能打印调试结果。

    当我在 Xcode 上调试时 需要大约 30 秒或更长时间才能打印结果po在 Xcode 控制台上 不幸的是 这只是我关于这个问题的很少的信息 然而 还有一点需要考虑 这个问题对于一个项目来说是非常具体的 这是因为当我使用po对于同一台 M
  • 有没有办法使用 cloudsql_proxy 可执行文件模拟服务帐户?

    https github com GoogleCloudPlatform cloudsql proxy https github com GoogleCloudPlatform cloudsql proxy 我发现可以通过使用以下命令设置模
  • 如何在类库项目中使用 Server.MapPath

    我有一个包含许多类库项目的 Web 应用程序 下面是一些示例代码 public static class LenderBL static string LenderXml get return MyPathHere public stati
  • 发送大量消息 Kafka Producer

    我正在使用卡夫卡 我有一个包含 10k json 的列表 目前我发送的 Json 如下 for int i 0 i lt jsonList size i ProducerRecord
  • 通过单一表单更新多个模型

    嘿伙计们请帮助我 我想Update两个表数据通过单个表单 但数据仅在单个表中更新并插入到第二个表中 而不是更新现有记录 这是我的代码 查看文件 echo this gt Form gt create Question echo this g
  • 如何将我当前的项目添加到已有的 GitHub 存储库

    我对 Git 很陌生 我一直在寻找答案 但找不到答案 在我的计算机中 我有一个像这样的项目文件夹 project a some folder another folder git 假设我在 GitHub 上有一个存储库https githu
  • 有没有办法在模型而不是视图中使用pluralize()?

    它似乎pluralize只能在视图中工作 我的模型有什么方法可以使用pluralize too 我没有扩展东西 而是这样 ActionController Base helpers pluralize count mystring 希望这对
  • android 如何调整媒体播放器表面视图中的视频宽度和高度

    想要在表面视图中调整视频大小 我正在使用 Surface 视图和视频支架在媒体播放器中播放视频 但在某些设备 如 Micromax iball Akash 平板电脑 上实现 MediaPlayerControl 时 它会给出 ACRA 错误
  • “ansible_ssh_common_args”变量可以用于清单文件中的不同子组吗?

    我正在尝试从 2 个不同的 ProxyJumpHost 连接到 2 个主机 例如 hostname1 只能通过 ProxyJumpHost1 访问 hostname2 只能通过 ProxyJumpHost2 访问 当我为该组单独提供 ans
  • 正则表达式错误地分割:用逗号但不在方括号内(两者都是 ) 和 ] )

    正则表达式的想法 用逗号分隔 后面不跟任何字符 and 或 此外 两个括号都应该被考虑 和 假设 字符串包含有效的括号 这是我的功能 function spl str var reg w s console log str split re
  • 我的 Admob 横幅显示在顶部

    我的应用程序中有一个 admob 横幅 并且我已经使用 AdMob 提供的文档实现了它 唯一的问题是它没有显示在屏幕底部 而是显示在顶部 现在我已经寻找了很长时间但我找不到如何更改它 也找不到网络上解决此问题的任何人 有人知道如何解决这个问
  • 使用 Gstreamer 提供 RTSP 流,寻求工作示例

    我们正在尝试让 Gstreamer 在 DM368 Leopardboard 上运行 我们已成功说服它创建测试视频 videotestsrc 对其进行编码并将其转储到文件中 有效的管道是 gst launch v videotestsrc
  • 使用 AutoFac 2 避免服务定位器

    我正在构建一个使用 AutoFac 2 进行 DI 的应用程序 我去过reading http code google com p autofac wiki BestPractices应避免使用静态 IoCHelper 服务定位器 IoCH
  • 什么样的下载代码违反了App Store审核指南?

    应用商店审查指南指出 以任何方式或形式下载代码的应用程序都将被拒绝 我想制作一个使用挑战响应进行身份验证的应用程序 该应用程序拥有 SHA 1 SHA 256 MD5 DES AES 等一组基本算法 挑战服务器制作包含随机排列的算法名称数组
  • PHP 一次提供一页服务

    我正在运行 Apache 2 和 PHP 5 2 配置 由于某种原因 PHP 一次只能提供一页服务 我有两个页面最能说明问题 test1 php 和 test2 php test1 php 中只有 sleep 120 test2 php 有
  • 2015 年的 signalr 3.0 beta 是否可用?

    想要将 Signalr 代码移植到 vnext 项目中 但我没有看到 SignalR 3 x 的参考 您需要在您的包中引用该包project json文件 像这样 dependencies Microsoft AspNet SignalR
  • 鼓励 JVM 进行 GC 而不是增加堆?

    请注意 当我说 JVM 时 我真正的意思是 热点 并且我正在运行最新的 Java 1 6 更新 示例情况 我的 JVM 正在运行 Xmx 设置为 1gb 目前 堆已分配 500mb 其中 450mb 已使用 该程序需要在堆上再加载 200
  • python中的正则表达式组重复

    string input ports 6012 6017 6016 m re match input ports s d 4 s d 4 s d 4 string print m groups gt 6012 6017 6016 但是当我想
  • elasticsearch聚合按聚合比率排序

    我在分析中有一个场景 我想计算表现最差的 20 个网点在 1000 多家门店中performance transactionCount VisitCount每月在折扣店 映射是 CustomerVisit properties outlet
  • 为什么 64 位机器上会出现内存碎片问题?

    在 32 位机器中 每个进程获得 4GB 的虚拟空间 在这种情况下 人们可能会担心我们可能会因为碎片化而遇到麻烦 但对于 64 位机器 理论上我们拥有巨大的可寻址虚拟内存 那么为什么内存碎片在 64 位机器中仍然是一个问题 如果有的话 您尝