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