Linux에서 "C" 프로그램이 소비하는 메모리를 계산하는 방법

Linux에서 "C" 프로그램이 소비하는 메모리를 계산하는 방법

나는 두 개의 C 프로그램을 작성했습니다

  1. 하나는 함수 포인터를 사용하는 것이고,
  2. 다른 하나는 함수 포인터가 없습니다.

이제 이 두 프로그램이 소비하는 메모리를 알고 메모리를 최적화하는 방법을 알고 싶습니다.

답변1

나중에 사용되는 메모리에만 관심이 있다면 GNU를 사용하세요 time.

command time -v myprogram

(위에서는 내장 명령이 아닌 bash외부 명령을 호출하는 방법을 사용하므로 쉘이 다를 수 있습니다.)timebash

또는 GNU memusage:

memusage -T ./myprogram

지속적으로 사용되는 메모리(예: 장기 실행 프로세스 중)에 관심이 있는 경우 다른 답변 중 하나가 더 나을 수 있습니다. 이 관련 질문도 참조하십시오.메모리 사용량 명령, 구문은 time 명령과 유사합니다.

답변2

원하는 통계 종류에 따라 다르지만 Linux에서 실행하기 위해 C로 프로그램을 작성하는 경우 확실히 아는 것이 더 나을 것입니다.월그린드.

Valgrind는 프로그램의 상세한 메모리 사용량을 분석할 수 있을 뿐만 아니라 C에서 흔히 발생하고 디버깅하기 어려울 수 있는 메모리 액세스 위반도 감지할 수 있습니다.

분석을 위해서는 특정 분석 도구에 대한 문서를 검토하십시오. 특히메모리 체크그리고구성.

답변3

다음은 시스템의 모든 sshd 프로세스에 대한 상주 세트 크기 및 가상 메모리 크기입니다.

ulric@qvp2:~$ ps -eo rss,vsz,args|grep sshd|grep -v grep
  448  55292 /usr/sbin/sshd -D
 5176 147460 sshd: ulric [priv]
 2776 149704 sshd: ulric@pts/3

아니면 더 쉬울 수도 있습니다.

ulric@qvp2:~$ ps aux|head -n 1&&ps aux|grep sshd|grep -v grep
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     13221  0.0  0.0  55292   448 ?        Ss   Apr21   0:01 /usr/sbin/sshd -D
root     16046  0.0  0.5 147460  5176 ?        Ss   08:12   0:00 sshd: ulric [priv]
ulric    16187  0.0  0.2 149704  2776 ?        S    08:12   0:00 sshd: ulric@pts/3

더 많은 옵션을 보려면 ps 맨페이지를 참조하세요.

답변4

가장 간단한 방법은 힙 포인터를 캡처하는 것입니다.sbrk(0), 이를 64비트 부호 없는 정수로 변환하고 메모리를 할당한 후 차이를 계산합니다.

관련 정보