Tombstone (bahasa pemograman)
Tombstone (batunisan) adalah mekanisme yang digunakan untuk mendeteksi dangling pointer dan mengurangi risiko kerusakan data yang dapat ditimbulkannya dalam program komputer. Dangling pointer dapat muncul di berbagai bahasa pemrograman, seperti C, C++, dan bahasa Assembly.
Batu nisan berfungsi sebagai struktur perantara antara pointer dan target datanya, yang biasanya berupa data heap-dinamik di memori. Dalam pendekatan ini, pointer sering disebut juga sebagai handle tidak menunjuk langsung ke data, melainkan ke batu nisan tersebut. Ketika data target dihapus, batu nisan diubah menjadi null atau nilai lain yang dianggap ilegal di lingkungan runtime.[1] Dengan demikian, pointer yang masih ada tidak lagi menunjuk ke data yang sudah dihapus, sehingga mencegah akses tidak sah ke area memori yang dapat menyebabkan kerusakan data.[2]
Dalam beberapa sistem operasi, CPU dapat secara otomatis mendeteksi upaya akses terhadap nilai null (misalnya melalui kesalahan dereferensi pointer null). Hal ini sangat membantu dalam proses debugging untuk menemukan sumber kesalahan pemrograman, serta dapat digunakan untuk menghentikan program secara aman dalam lingkungan produksi guna mencegah kerusakan data lebih lanjut.
Secara umum, konsep batu nisan dapat diartikan sebagai penanda bahwa "data ini tidak ada lagi." Contohnya, dalam sistem berkas, sering kali lebih efisien untuk menandai berkas sebagai "dihapus" ketimbang langsung mengambil kembali semua blok datanya.
Namun, penggunaan batu nisan memiliki beberapa kelemahan. Di antaranya adalah tambahan beban komputasi dan konsumsi memori: diperlukan proses ekstra untuk mengakses data melalui batu nisan, serta ruang memori tambahan untuk menyimpan batu nisan itu sendiri. Selain itu, semua bagian program yang menggunakan pointer tersebut harus diubah untuk mendukung mekanisme batu nisan ini.[3]
Dalam bahasa pemrograman modern, seperti C++, pola batu nisan diimplementasikan dalam pustaka standar melalui konsep weak pointer menggunakan std::weak_ptr
. Dukungan bawaan dari bahasa atau kompiler tidak diperlukan untuk menerapkan mekanisme ini.
Lihat juga
[sunting | sunting sumber]Referensi
[sunting | sunting sumber]- ^ Scott, Michael (2000). Programming Language Pragmatics (dalam bahasa Inggris). Morgan Kaufmann. ISBN 978-1-55860-442-1.
- ^ Gabbrielli, Maurizio; Martini, Simone (2010-03-23). Programming Languages: Principles and Paradigms (dalam bahasa Inggris). Springer Science & Business Media. ISBN 978-1-84882-914-5.
- ^ Shaffer, Clifford A. (2012-07-26). Data Structures and Algorithm Analysis in C++, Third Edition (dalam bahasa Inggris). Courier Corporation. ISBN 978-0-486-17262-0.