Rafael Fontenelle
rafaelff@gnome.org 2016-2018
Leônidas Araújo
leorusvellt@hotmail.com 2022-2024

# O que heap significa?

# O que “In file [heap]” significa?

Isso significa que o sysprof acredita que uma função foi chamada de algum lugar na heap do programa (onde `malloc` aloca memória) em vez da seção de código (onde o código executável normalmente vive). Há várias possível explicações.

# Compiladores JIT (Just in Time)

Linguagens como o Java podem gerar código executável enquanto um programa está em execução e armazena-o na heap. Sysprof está relatando com precisão a situação neste caso.

# Otimizando compiladores

Compiladores C e C++ podem otimizar as informações necessárias para determinar o chamador de uma função, então isso é confundido com [heap]. Você ainda podem dizer quão frequente cada função é chamada pelo programa, mas nem sempre de onde.

Para o gcc, a sinalização `-fno-omit-frame-pointer` vai evitar essa otimização. A sinalização nem sempre é necessária, por exemplo em máquinas x86_64 só é necessário com a otimização -O3.

Para obter a árvore de chamadas mais detalhada e precisa a partir de código não otimizado, use essas sinalizações: `-ggdb -fno-omit-frame-pointer -O0`