【问题标题】:Dynamic memory managment under LinuxLinux下的动态内存管理
【发布时间】:2010-03-28 17:25:16
【问题描述】:

我知道在windows下有global_alloc()之类的API函数,分配内存,返回句柄,然后可以锁定这个句柄,返回一个指针,然后再次解锁。解锁后,系统可以在空间不足时移动这块内存,优化内存使用。

我的问题是Linux下是否有类似的东西,如果没有,Linux如何优化其内存使用?

【问题讨论】:

    标签: linux memory


    【解决方案1】:

    这些 Windows 功能来自于所有程序在实模式下在相同地址空间中运行的时代。 Linux 和现代版本的 Windows 在单独的地址空间中运行程序,因此它们可以通过在 page tables 中重新映射特定虚拟地址解析到的物理地址来在 RAM 中移动它们。无需让程序员负担如此低级的细节。

    即使在 Windows 上,也不再需要使用此类函数,除非与少量旧 API 交互。如果您对更详细的信息感兴趣,我相信 Raymond Chen 的博客和书籍对此主题进行了一些讨论。例如,这是关于 GlobalLock 历史系列的part 4

    【讨论】:

    • 对。出于同样的原因,Mac Systems 5-8 也有类似的安排。谢天谢地,现在已经成为过去。
    【解决方案2】:

    不确定 Linux 等效项是什么,但在 ATT UNIX 中,核心操作系统的内存管理器中有“分散收集”内存管理功能。在虚拟内存操作环境中,没有绝对地址,因此应用程序没有等效功能。可执行对象加载器(将可执行文件加载到成为进程的内存中)使用来自内存管理器的内存寻址,该内存管理器在其页表(包含物理内存地址)中维护的虚拟内存块中保持跟踪。底线是您的应用程序的物理内存布局可能绝不是线性的或可直接访问的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      相关资源
      最近更新 更多