在面試時,我的一位朋友被要求編寫一個測量可用RAM數量的程序。預期的答案是以二進制搜索的方式使用malloc()
:分配越來越大的內存部分,直到獲得失敗消息,減少部分大小,並且總計分配的內存量。檢查正在運行的程序中可用RAM的數量
我相信這種方法會測量虛擬內存的數量,而不是物理內存。但我對這件事很好奇。
有沒有辦法從程序中分辨出可用RAM的數量,而不使用exec(dmesg |grep -i memory)
?
在面試時,我的一位朋友被要求編寫一個測量可用RAM數量的程序。預期的答案是以二進制搜索的方式使用malloc()
:分配越來越大的內存部分,直到獲得失敗消息,減少部分大小,並且總計分配的內存量。檢查正在運行的程序中可用RAM的數量
我相信這種方法會測量虛擬內存的數量,而不是物理內存。但我對這件事很好奇。
有沒有辦法從程序中分辨出可用RAM的數量,而不使用exec(dmesg |grep -i memory)
?
你是對的:malloc()不區分物理或虛擬內存。事實上,這就是虛擬內存的重點:使這些細節與程序無關。
你可以找出,但它是操作系統特定的。例如,Linux。
要做到這一點的唯一方法是使用一些特定於操作系統的功能。使用malloc()是沒用的,原因如下:
這是操作系統特定的,除非你想使自己的記憶,你應該收集來自OS等服務信息管理層
非常特定於操作系統,但對於Linux,有關係統內存的信息位於/ proc/meminfo中。您也可以使用sysctl接口(http://www.linuxjournal.com/article/2365)在C程序中獲取這些數據。
使用malloc()只會告訴你多少內存可以分配給一個進程。這可能有一些原因,使其低於虛擬內存總量。例如,您可能有OS配額或每個進程的32位有限地址空間。
(而且,當然,虛擬內存> = RAM)
聽起來像是不錯的面試故事日常FTW。 – akarnokd 2009-06-26 10:35:58
這聽起來像是一個問題,以測試受訪者對內存管理的瞭解 - 虛擬內存等。 – sharptooth 2009-06-26 10:46:13
雖然這是一個不錯的選擇。它測試操作系統和內存管理知識以及創造力。人們可以在不瞭解內存管理的情況下提出解決方案。 – 2009-06-26 11:53:07