Apa perlunya pengumpulan sampah (GC) dalam bahasa berbasis tumpukan? Dalam bahasa seperti Forth atau RPL (pada kalkulator HP ), apakah ada kebutuhan untuk pengumpulan sampah?
Saya akan berpikir, karena keluaran muncul dari tumpukan, bahwa tidak akan ada kebutuhan. Apakah saya melewatkan sesuatu?
garbage-collection
stack-oriented
Todd Moses
sumber
sumber
Ya kau benar. Tetapi tumpukan berdasarkan hanya bagian dari keseluruhan cerita. Sebagai contoh, Java bytecode interpreter juga berbasis stack (kode yang dikompilasi bekerja - untuk alasan efisiensi - berbeda). Ini memberitahu kita, bahwa bahasa apa pun dapat diubah menjadi bahasa tumpukan.
Yang penting adalah objek di luar tumpukan, mereka yang bisa hidup lebih lama dari eksekusi metode saat ini. Selama bahasanya tidak seperti
malloc
ataunew
tidak ada objek seperti itu dan Anda tidak perludelete
atau tidak GC.Bahasa yang tidak memiliki alokasi memori dinamis sangat terbatas kegunaannya.
sumber
Pengumpulan sampah diperlukan jika bahasa akan mendukung struktur data dinamis secara inheren. Yang hampir menjadi keharusan jika Anda ingin melakukan apa pun di luar tingkat C. Tanpa itu Anda terjebak dengan hanya struktur data berukuran tetap dan mengelola memori sendiri. Tentu saja itulah yang dilakukan Forth asli, tetapi mungkin bukan sesuatu yang ingin Anda lakukan hari ini kecuali Anda hanya melakukan pengkodean sistem tingkat rendah.
sumber
Pengumpulan sampah tidak diperlukan jika bahasa menggunakan alokasi statis alih-alih alokasi tumpukan. Misalnya Fortran 77 dengan opsi -s (penyimpanan statis) mengalokasikan semua memori ketika program dimulai, oleh karena itu tidak ada alokasi memori yang terjadi pada saat runtime untuk dibebaskan. Meskipun membutuhkan disiplin, dimungkinkan untuk menulis program, terutama simulasi untuk menggunakan alokasi memori statis. Alokasi statis menghilangkan kebocoran memori, dan mengarah ke kinerja cache yang hebat karena kompiler dapat menggunakan analisis statis untuk menentukan apa yang akan dimuat ke dalam cache.
sumber