2017-03-09 101 views
0

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

我想在C/C++编程第一本,然后在将其传送到我们选择的语言是BCPL的过程。

我的目的是探讨我可以堆内存弄清楚我是多么的内存可以安全地使用和乱用。这样做是否容易,或者只声明一个静态大小,比如10,000字节会更有效率?

感谢

+0

***我的意图是探测我的可用堆内存,找出我可以安全使用多少内存***无论您正在使用的操作系统应该有一些操作系统特定的功能。 – drescherjm

+0

因此,在Windows上,它可能是一个函数,可能是Win32 API的一部分? –

+1

只是想指出几乎任何系统的10KB都是微不足道的 – vu1p3n0x

回答

4

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

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

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

如果“实现一个内存池”,你的意思是你想实现一个allocator,那么malloc()大多数实现会叫VirtualAlloc()需要更多的内存映射到进程,所以你可能要与发挥。如果你想实现一个操作系统,那么下一步将重新实现VirtualAlloc(),这实际上涉及实现一个虚拟内存管理系统。