【问题标题】:Dynamical Memory Allocation / Making use of unused memory动态内存分配/利用未使用的内存
【发布时间】:2013-05-14 13:31:01
【问题描述】:

我要编写一个动态需要大量内存的应用程序。 大部分内存用于缓存目的,仅用于加速。 这些部分实际上可以按需释放。

不幸的是,如果内存不足,我的内核将终止该进程。但它可以 简单地释放内存。所以我想要的与linux页面缓存非常相似 解释here。是否有可能以方便的方式在用户空间中实现这种行为?

我正在考虑使用“缓存文件”实现这样的缓存,这些缓存文件存储在带有内存映射文件 IO 的 ramfs/tmpfs 上,但我敢肯定,有一种更舒适的方法。

提前致谢!

【问题讨论】:

  • malloc 失败了,你释放一些内存怎么样?如果您在分配新的堆栈帧时内存不足,那么您无能为力...
  • 您可以使用您提到的文件方法也可以考虑位图文件。除此之外,您可以使用内存池选项,您可以一次分配内存并使用池中的内存并归还内存在不需要时进行池化。
  • @GradyPlayer:那我就不得不一直 malloc 来识别内存不足。除此之外,我的进程仍然可能被杀死。
  • 你用的是什么内核?内存警告信号是几个内核的一个特性......
  • @GradyPlayer:好的,不知道这个功能。我去找找。

标签: c++ c memory-management


【解决方案1】:

是的,这应该是可能的。大多数内核都有一个内存分配方法,在该方法中进程休眠直到它获得请求的内存。 (我使用过的所有内核都有)。如果你不这样做,这可能是实施一个的好时机。您可以查看 linux 中的 kmem 函数。 然而,这是一种被动的方式来做你所要求的。该过程将一直等到其他人释放内存。 如果您想在没有内存的情况下从您自己的进程地址空间中释放内存,这可以从用户空间轻松完成。您需要保留已分配内存的日志,并在分配失败时按需释放不需要的内存。

【讨论】:

  • 嗯,但我不想碰我的内核(我正在使用 linux)。我想在用户空间做所有事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-03
  • 2013-11-20
  • 1970-01-01
  • 2012-01-13
  • 2014-04-30
相关资源
最近更新 更多