Optymalizacja C++
Gnu profiler gprof

Przykład : test_gprof.c test_gprof_new.c

(Pokaż/ukryj kod)

//test_gprof.c
// gcc -Wall -pg test_gprof.c test_gprof_new.c -o test_gprof
 
#include<stdio.h>
void new_func1(void);
 
void func1(void) {
    printf("\n Inside func1 \n");
    int i = 0;
    for(;i<0x1fffffff;i++);
    new_func1();
}
static void func2(void) {
    printf("\n Inside func2 \n");
    int i = 0;
    for(;i<0x2fffffaa;i++);
}
int main(void) {
    printf("\n Inside main()\n");
    int i = 0;
    for(;i<0xffffff;i++);
    func1();
    func2();
    func1();
    return 0;
}
 

(Pokaż/ukryj kod)

//test_gprof_new.c
#include<stdio.h>
void new_func1(void) {
    printf("\n Inside new_func1()\n");
    int i = 0;
    for(;i<0x1fffffee;i++);
}
 

Krok 1: Kompilujemy i linkujemy z opcją -pg

gcc -Wall -pg test_gprof.c test_gprof_new.c \
    -o test_gprof

Krok 2: Wykonujemy kod

./test_gprof
To wygeneruje informacje do pliku gmon.out w bieżącym katalogu.

Krok 3: Analizujemy informacje używając gprof

gprof test_gprof gmon.out > analysis.txt
Parametrami są program który profilujemy oraz plik z wygenerowanymi informacjami.

Plik analysis.txt zawiera zestawienie funkcji posortowanych względem sumarycznego czasu wykonania oraz graf wywołań (która funkcja wywoływała daną funkcję i ile razy).


Tomasz Kapela, Kraków 2011-2020