2017-03-09 99 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(),這實際上涉及實現一個虛擬內存管理系統。