2009-06-26 3 views
2

취업 인터뷰 중 친구에게 사용 가능한 RAM 양을 측정하는 프로그램을 작성하라는 요청을 받았습니다. 예상되는 대답은 이진 검색 방식으로 malloc()을 사용했습니다. 즉, 실패 메시지를받을 때까지 크고 큰 부분의 메모리를 할당하고, 부분 크기를 줄이며, 할당 된 메모리 양을 합산하는 것입니다.실행중인 프로그램에서 사용 가능한 RAM 양 확인

이 방법은 실제 메모리가 아닌 가상 메모리의 양을 측정합니다. 그러나 나는 그 문제에 대해 궁금해.

exec(dmesg |grep -i memory)을 사용하지 않고 프로그램 내에서 사용 가능한 RAM의 양을 알 수있는 방법이 있습니까?

+1

일일 FTW에 대한 좋은 직업 인터뷰 기사처럼 들립니다. – akarnokd

+0

일반적으로 인터뷰 대상자의 메모리 관리 지식 (가상 메모리 등)을 테스트하는 질문과 비슷합니다. – sharptooth

+0

그래도 좋은 소식입니다. 그것은 운영 체제 및 메모리 관리 지식과 창의력을 테스트합니다. 하나는 메모리 관리에 대해 알지 못해도 해결책을 제시 할 수 있습니다. –

답변

5

맞습니다 : malloc()은 실제 메모리 또는 가상 메모리를 구분하지 않습니다. 사실 가상 메모리의 핵심은 프로그램과 관련없는 세부 사항을 만드는 것입니다.

알아낼 수는 있지만 OS에 따라 다릅니다. 예 : Linux.

+0

감사. procfs에는 좋은 정보가 있습니다 - OS 의존적이지만 매우 유용합니다. –

3

이 작업을 수행하는 유일한 방법은 일부 OS 관련 기능을 사용하는 것입니다. 의 malloc()을 사용하면 여러 가지 이유로 쓸모가 :

  • 가 측정 가상 메모리
  • OS가 아니라 종종 저하 물리적으로 사용할 수있는 것보다 훨씬 더 많은 메모리를 할당 메모리 할당
  • 에 프로세스 당 캡을 가질 수있다 플랫폼에서 안정성이 문제에서 제안 된 "돌아 가기"알고리즘이 작동하지 않을 수도 있습니다.
1

이것은 OS마다 다르므로 자신의 메모리를 만들고 싶지 않으면 OS 서비스에서 이러한 정보를 수집해야합니다. 관리 계층

+0

나는 그것을 진지하게 의심한다. –

0

OS별로 다르지만 Linux의 경우 시스템 메모리에 대한 정보는/proc/meminfo에 있습니다. sysctl 인터페이스 (http://www.linuxjournal.com/article/2365)를 사용하여 C 프로그램에서이 데이터를 얻을 수도 있습니다.

1

malloc()을 사용하면 단일 프로세스에 할당 할 수있는 메모리 양만 알려줍니다. 이것이 가상 메모리의 총량보다 낮은 이유가있을 수 있습니다. 예를 들어 OS 할당량 또는 프로세스 당 32 비트 제한 주소 공간이있을 수 있습니다.

(물론 가상 메모리> = RAM)