2011-11-29 2 views
0

예 : 간단한 프로그램 예 : C++에서* nix에서 공유 라이브러리없이 프로세스 메모리를 계산하는 방법은 무엇입니까?

#include <iostream> 
int main() 
{ 
    int a = 1000; 
    std::cout << a << std::endl; 
    return 0; 
} 

나는 GNU 시간을 가진 기억 사용법을 산출하는 것을 시도하고있다. 그러나 "time"출력 (내 형식에서는 중요하지 않음)에서 메모리의 최대 프로세스 크기는 printf 함수 (std :: cout 호출)가 있고 3.5Mb와 같은 libc.so로 계산됩니다.
로드 된 공유 라이브러리없이 프로세스 메모리를 계산할 수있는 방법이 있습니까?

UPD 몇 가지 이유로 메모리를 측정하고 싶은 프로세스가 실행되는 동안에는 그 작업을 수행 할 수 없습니다. 외부 래퍼 도구와 함께 할 수있는 방법이 있다면 나는, 자신의 프로세스

답변

0

pmap 유틸리티, 아니면 그냥 PID (123)의 과정에 대한 파일 /proc/123/maps을 읽기, /proc/self/maps (같은 time는) 부탁 해요 당신에게주는 메모리의 상세한지도. 그런 다음 측정하지 않으려는 라이브러리와 관련된 행은 무시할 수 있습니다.

자세한 내용을 보려면 cat /proc/self/maps을 시도하십시오 (해당 cat 명령의 맵을 표시합니다).

이것은 Linux 전용입니다 (Solaris 또는 FreeBSD에서는 작동하지 않을 수 있습니다).

더 많은 표준 getrusage 시스템 호출 (공유 라이브러리에서 사용하는 메모리를 다른 메모리 사용과 구별하지 않음)도 있습니다.

+0

나는'pmap'에 대해 알고 있습니다. 이 경우 메모리 크기를 직접 추가하길 원하십니까? 선을 구문 분석하고 필요한 항목 만 추가 하시겠습니까? 아마도 더 나은 방법이있을 것입니다 ('time' util과 같습니다). 프로그램을 실행하는 동안 메모리를 측정 할 수있는 능력이 없을 것입니다. (프로그램을 실행할 시간을 모르기 때문에) – Ribtoks

+0

공유 라이브러리에 필요한 공간을 제거하려는 이유가 무엇입니까? 왜이 공간이 당신에게 특별한가요? –

+0

저는 ACM 솔루션을위한 콘테 스터 시스템을 개발 중입니다. 사용자 솔루션이 메모리 및 시간에 대한 문제 제한에 부합하는지 알아야합니다. 그리고 만약 사용자 솔루션이이 문제와 비슷하다면 실제로는 작은 크기 (11Kb)이지만'printf'가 호출 될 때 최대 크기는 3.5Mb가됩니다 – Ribtoks

관련 문제