Apa yang dimaksud dengan heap?
Apa arti "Dalam berkas [heap]"?
Ini berarti bahwa sysprof percaya bahwa suatu fungsi dipanggil dari suatu tempat di heap program (di mana malloc mengalokasikan memori) daripada bagian kode (di mana kode yang dapat dieksekusi biasanya hidup.) Ada beberapa kemungkinan penjelasan.
Kompiler JIT (Just in Time)
Bahasa seperti Java dapat menghasilkan kode yang dapat dieksekusi saat program sedang berjalan dan menyimpannya di heap. Sysprof secara akurat melaporkan situasi dalam kasus ini.
Mengoptimalkan kompiler
Kompiler C dan C++ dapat mengoptimalkan informasi yang diperlukan untuk menentukan pemanggil fungsi, sehingga disalahartikan sebagai [heap]. Anda masih dapat mengetahui seberapa sering setiap fungsi dipanggil oleh program, tetapi tidak selalu dari mana.
Untuk gcc, flag -fno-omit-frame-pointer akan mencegah pengoptimalan ini. Flag tidak selalu diperlukan, misalnya pada mesin x86_64 hanya diperlukan dengan optimasi -O3.
Untuk mendapatkan pohon panggilan yang paling rinci dan akurat dari kode yang tidak dioptimalkan, gunakan flag ini: -ggdb -fno-omit-frame-pointer -O0