Andika Triwidada
andika@gmail.com 2022

# 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`