【问题标题】:Memory Pool Allocation内存池分配
【发布时间】:2017-07-30 22:40:46
【问题描述】:

我目前正在为操作系统课程实施我自己的内存池,我想知道是否有任何方法可以搜索系统上的可用内存。

我想先用 C/C++ 进行编程,然后将其转换为我们选择的课程语言,即 BCPL。

我的目的是探测我的可用堆内存,以确定我可以安全地使用和处理多少内存。这样做是否容易,或者仅声明一个静态大小(例如 10,000 字节)会更有效吗?

谢谢

【问题讨论】:

  • 我的目的是探测我的可用堆内存,以确定我可以安全使用多少内存无论你使用什么操作系统,都应该有一些操作系统具体功能。
  • 那么,在 Windows 上,它会是一个可以成为 Win32 API 一部分的函数吗?
  • 只想指出,10KB 对于几乎任何系统来说都是微不足道的

标签: c++ winapi memory-management operating-system


【解决方案1】:

既然你提到你在Windows上,听起来你想要的功能是GlobalMemoryStatusEx。具体来说,来自文档:

您可以使用 GlobalMemoryStatusEx 函数来确定您的应用程序可以分配多少内存,而不会严重影响其他应用程序。

之后你可以调用 malloc/HeapAlloc/VirtualAlloc 来获得一大块连续的内存来玩。

如果通过“实现一个内存池”,你的意思是你想实现一个分配器,那么malloc() 的大多数实现会调用VirtualAlloc() 来根据需要将更多内存映射到进程中,所以你可能想玩那。如果你想实现一个操作系统,那么下一步就是重新实现VirtualAlloc(),这实际上将涉及实现一个虚拟内存管理系统。

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 2013-11-06
    • 2014-09-08
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多