Como calcular a memória consumida por um programa “C” no linux

4

Eu escrevi dois programas em C

  1. um está usando o ponteiro de função e
  2. o outro sem ponteiro de função.

Agora eu quero saber a memória consumida pelos dois programas, para ver como a memória pode ser otimizada.

    
por Nagraj 03.06.2015 / 08:07

4 respostas

4

Dependeria do tipo de estatísticas que você quer, mas se você estiver escrevendo um programa em C rodando em Linux, você definitivamente saberia melhor sobre Valgrind .

O Valgrind pode, não só criar perfis detalhados do uso de memória do seu programa, mas também detectar violações de acesso à memória que são comuns em C e possivelmente muito difíceis de depurar.

Para o seu objetivo de perfil, dê uma olhada em documentos sobre ferramentas de análise específicas, especialmente memcheck e < href="http://valgrind.org/docs/manual/ms-manual.html"> maciço .

    
por 03.06.2015 / 09:01
4

Se você estiver interessado apenas na memória usada após o fato, use GNU time :

command time -v myprogram

(o acima usa a maneira bash de invocar o comando time externo em vez do bash construído, seu shell pode variar).

Ou, GNU memusage :

memusage -T ./myprogram

Se você estiver interessado na memória usada continuamente (ou seja, durante um processo de longa duração), provavelmente uma das outras respostas será melhor. Veja também esta questão relacionada: Comando de uso de memória com sintaxe semelhante ao comando de hora

    
por 03.06.2015 / 11:13
1

Aqui está o tamanho do conjunto residente e o tamanho da memória virtual de todos os processos sshd em um sistema:

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

Ou talvez mais fácil:

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

Veja a página de manual do ps para mais opções.

    
por 03.06.2015 / 08:26
-2

O mais fácil é simplesmente capturar os ponteiros do heap através de sbrk (0) , convertê-los como inteiros não assinados de 64 bits e calcular a diferença após a memória ser alocada.

    
por 04.04.2017 / 17:13