Piotr Drąg
piotrdrag@gmail.com 2017-2019
Aviary.pl
community-poland@mozilla.org 2017-2019

# Co oznacza „heap”?

# Co oznacza „In file [heap]”?

Oznacza to, że Sysprof uważa, że funkcja została wywołana ze stosu programu (gdzie `malloc` przydziela pamięć) zamiast z sekcji kodu (gdzie zwykle znajduje się kod wykonywalny). Jest kilka możliwych wyjaśnień.

# Kompilatory JIT

Języki typu Java mogą tworzyć kod wykonywalny podczas działania programu i przechowywać go na stosie. W takim przypadku Sysprof właściwie zgłasza sytuację.

# Kompilatory optymalizujące

Kompilatory języków C i C++ mogą optymalizować (usuwać) informacje wymagane do ustalania wywołania funkcji, które jest mylone ze stosem. Nadal można badać częstość wywoływania każdej funkcji przez program, ale nie zawsze ich pochodzenie.

W przypadku kompilatora GCC flaga `-fno-omit-frame-pointer` wyłącza tę optymalizację. Nie jest ona zawsze wymagana, na przykład komputery w architekturze x86_64 wymagają jej tylko dla optymalizacji -O3.

Użycie flag `-ggdb -fno-omit-frame-pointer -O0` umożliwia uzyskanie najbardziej szczegółowego i dokładnego drzewa wywołań z niezoptymalizowanego kodu.