Contagem de tempo de processamento e uso de memória usando C

Cinthia Mikaela de Souza

  

O tutorial a seguir tem como objetivo ensiná-lo a realizar a contagem de tempo de processamento e memoria de uso em c. Para isso utilizaremos um código capaz de realizar esses procedimentos.

Para rodar este código será utilizado o Code::blocks. Será necessário realizar algumas configurações para o funcionamento.  Primeiramente, você deve criar um projeto com o seguinte código.

#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <winbase.h>
#include <psapi.h>

double get_memory_used_MB()
{
    PROCESS_MEMORY_COUNTERS info;
    GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) );
    return (double)info.PeakWorkingSetSize/ (1024*1024);
}

int main(int argc, char *argv[])
{
    clock_t start_time, end_time;
    double cpu_time_used, memory_used;
    size_t peakSize;

    start_time = clock();


    for(int i=0;i<1000000;i++){
        printf("%i  ",i);
    }

    end_time = clock();
    cpu_time_used = ((double) (end_time - start_time)) / CLOCKS_PER_SEC;

    memory_used = get_memory_used_MB();

    printf("Tempo: %0.2f segundos - Memoria: %0.2f MB\n",cpu_time_used, memory_used);

    return 0;
}


        

Após ter criado o projeto você deve clicar sobre ele com o botão direito do mouse, depois em "build options". Como mostra a imagem abaixo.

​​​​​​​


AED

imagem.1 Imagem widget

        

Após isso abrirá a seguinte janela.


imagem2

imagem2 Imagem widget

        

Você deve ir na aba "Linker settings" e adicionar o texto "-lpsapi" em "Other linker options". Como mostra a imagem acima. Após isso basta compilar o código.

        

Utilizando este código obtive que o tempo gasto para imprimir 1000000 números é de 106.79s e a quantidade de memória utilizada é de 16.47MB. 


sequência de fibonacci

O código a seguir realiza a contagem do processamento de tempo e memória para calcular n termos da sequência de Fibonacci. 

#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <winbase.h>
#include <psapi.h>

double get_memory_used_MB(){
    PROCESS_MEMORY_COUNTERS info;
    GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) );
    return (double)info.PeakWorkingSetSize/ (1024*1024);
}

long long int fib(int n){
    if(n < 2) return n;
    return fib(n-1) + fib(n-2);
}

int main(int argc, char *argv[])
{
     clock_t start_time, end_time;
     double cpu_time_used, memory_used;
     size_t peakSize;

     start_time = clock();

     int *vetor=NULL,i=1;

     while(true){

        long long int tam = fib(i++);
        printf("%d\n", tam);

        vetor = (int*)malloc(tam*sizeof(int));

        if(vetor==NULL) break;

        free(vetor);
     }

     end_time = clock();
     cpu_time_used = ((double) (end_time - start_time)) / CLOCKS_PER_SEC;

     memory_used = get_memory_used_MB();

     printf("Tempo: %0.2f segundos - Memoria: %0.2f MB\n",cpu_time_used, memory_used);

    return 0;
}


fragmento de código widget

        

Utilizando este código obtive que o tempo gasto para calcular 31 números da sequência de Fibonacci  é de 21.10s e a quantidade de memória utilizada é de 16.49MB.​​​​​​​


Voltar