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