Menurut pendapat dogmatis yang saya akui tentang satu hal ini, tidak ada alasan untuk kebocoran fisik setidaknya di perpustakaan mana pun yang bertujuan diterapkan secara luas. Jadi saya akan mencoba untuk bug pengembang GTK + sampai mereka memperbaikinya sendiri.
Cukup sepele bagi perpustakaan untuk mendaftarkan atexit
panggilan balik untuk membebaskan memori apa pun yang dialokasikan setidaknya setelah dibongkar. Jika ia ingin menghindari biaya alokasi kapal yang sangat kecil, itu semestinya tidak dilakukan.
Bahkan program paling malas yang hanya ingin mengalokasikan satu kapal penuh memori yang sangat sedikit sekaligus dapat menggunakan pengalokasi sekuensial langsung yang hanya membersihkan semua memori pada saat shutdown. Jika pengalokasi bahkan tidak ingin berurusan dengan penyelarasan, itu hanya bisa pad setiap potongan itu dikumpulkan ke batas penyelarasan maksimum. Jika itu bisa mendapatkan keuntungan dengan waktu shutdown yang lebih cepat dengan tidak membebaskan semua potongan memori yang kecil secara individual, itu juga menguntungkan banyak secara simetris dengan imbalan upaya sepele dengan menggunakan pengalokasi sekuensial yang menyatukan memori dalam mode berurutan lurus dengan alokasi jauh lebih cepat daripadamalloc
dan lebih banyak pola memori yang ramah-cache, hanya untuk memiliki semua blok besar memori yang berdekatan dikumpulkan oleh pengalokasi dibebaskan ketika ketika perpustakaan dilakukan. Semua perpustakaan harus lakukan adalah mengganti mereka malloc
panggilan yang mereka tidak repot-repot untuk free
dengan sesuatu seperti seq_malloc
, dan panggilan seq_purge
dalam atexit
callback untuk membebaskan semua memori yang dialokasikan pada diturunkan.
Kalau tidak Anda punya perpustakaan jahat ini mengacaukan pesan di alat deteksi kebocoran memori Anda, Anda sekarang harus menyaring. Lebih buruk lagi, jika Anda tidak secara sistematis menyaringnya, mereka dapat mengaburkan kebocoran dalam aplikasi Anda sendiri dan kolega Anda mungkin mengembangkan kebiasaan untuk menghadapinya, mengurangi kegunaan alat deteksi kebocoran di tempat pertama dalam mencegah tim Anda sendiri dari mendorong kode bocor. Itu kotor dan jelek dan yang paling penting saya tidak menemukan argumen yang mendukung melakukan ini sengaja menjadi menarik sama sekali mengingat betapa sepele untuk menggunakan solusi di atas.
Kebocoran logis (jenis yang lebih kompleks yang bahkan tidak dapat dilindungi oleh pengumpulan sampah) adalah masalah yang lebih kompleks, dan di sana saya dapat menemukan beberapa pembenaran untuk program jangka pendek untuk memiliki kebocoran logis selama mereka membersihkan semua memori yang mereka alokasikan pada shutdown karena itu memerlukan banyak pemikiran tentang manajemen sumber daya untuk menghindari kebocoran logis (bisa dibilang lebih dalam bahasa yang memiliki GC). Tapi saya tidak menemukan alasan yang masuk akal untuk menghindari kebocoran fisik mengingat betapa sepele mereka untuk menghindari bahkan dalam konteks yang paling malas.
Bagaimanapun, setidaknya saya akan menyaring kebocoran di valgrind sehingga mereka setidaknya tidak mengacaukan kemampuan tim Anda untuk menemukan sendiri.