2009-06-26 30 views
2

在面試時,我的一位朋友被要求編寫一個測量可用RAM數量的程序。預期的答案是以二進制搜索的方式使用malloc():分配越來越大的內存部分,直到獲得失敗消息,減少部分大小,並且總計分配的內存量。檢查正在運行的程序中可用RAM的數量

我相信這種方法會測量虛擬內存的數量,而不是物理內存。但我對這件事很好奇。

有沒有辦法從程序中分辨出可用RAM的數量,而不使用exec(dmesg |grep -i memory)

+1

聽起來像是不錯的面試故事日常FTW。 – akarnokd 2009-06-26 10:35:58

+0

這聽起來像是一個問題,以測試受訪者對內存管理的瞭解 - 虛擬內存等。 – sharptooth 2009-06-26 10:46:13

+0

雖然這是一個不錯的選擇。它測試操作系統和內存管理知識以及創造力。人們可以在不瞭解內存管理的情況下提出解決方案。 – 2009-06-26 11:53:07

回答

5

你是對的:malloc()不區分物理或虛擬內存。事實上,這就是虛擬內存的重點:使這些細節與程序無關。

你可以找出,但它是操作系統特定的。例如,Linux

3

要做到這一點的唯一方法是使用一些特定於操作系統的功能。使用malloc()是沒用的,原因如下:

  • 它測量虛擬內存
  • 操作系統可能會對內存分配
  • 分配更多的內存實際可用通常會降低每個進程帽平臺穩定性的地步,「退一」的問題,提出的算法可能會無法正常工作
1

這是操作系統特定的,除非你想使自己的記憶,你應該收集來自OS等服務信息管理層

1

使用malloc()只會告訴你多少內存可以分配給一個進程。這可能有一些原因,使其低於虛擬內存總量。例如,您可能有OS配額或每個進程的32位有限地址空間。

(而且,當然,虛擬內存> = RAM)

相關問題