Bilakah Kebocoran Memori Berlaku?
Selepas perisian memperuntukkan memori tetapi tidak melepaskannya selepas ia selesai dengannya, terdapat a kebocoran memori . Ini bermakna program ini terus memperuntukkan lebih banyak memori untuk pembolehubah baharu sambil membiarkan memori lama diperuntukkan dan tidak digunakan. Ini mengakibatkan atur cara menggunakan lebih banyak memori, dan akhirnya, atur cara ranap kerana ralat kehabisan memori.
Kesan Kebocoran Memori dalam C
Kebocoran memori boleh menyebabkan banyak masalah dalam sesuatu program. Jika dibiarkan, a kebocoran memori boleh menyebabkan program ranap atau berhenti berjalan, yang boleh menyebabkan kehilangan data atau rasuah. Selain itu, memandangkan program menggunakan lebih banyak memori daripada yang diperlukan, ia boleh memberi kesan kepada prestasi sistem dan mungkin melambatkan program lain yang berjalan pada sistem yang sama.
Peruntukan Memori dalam Bahasa C
Peruntukan memori dilakukan menggunakan malloc() fungsi dalam Bahasa C. Kaedah ini memberikan kembali rujukan kepada blok memori dengan saiz yang ditentukan. Nilai penunjuk digunakan untuk mengakses blok memori yang diperuntukkan. Sebaik sahaja memori tidak diperlukan, ia perlu dibebaskan menggunakan percuma() fungsi.
Punca Kebocoran Ingatan
Beberapa punca berlakunya kebocoran ingatan ialah:
1: Pengurusan Memori Tidak Betul
Sebab yang paling kerap berlaku untuk kebocoran memori adalah pengurusan memori yang lemah di pihak pengaturcara. Ini berlaku apabila program mengabaikan untuk melepaskan memori yang tidak diperlukan lagi.
#include
#include
int utama ( )
{
int * ptr = ( int * ) malloc ( saiz ( int ) ) ;
* ptr = 10 ;
printf ( '%d \n ' , * ptr ) ;
ptr = NULL ;
kembali 0 ;
}
Dalam kod di atas, menggunakan malloc() kaedah dalam ptr penunjuk, kami memperuntukkan ruang untuk blok ingatan integer. The ptr nilai penunjuk berubah apabila kita tetapkan NULL kepadanya, namun blok memori yang dirujuk sebelum ini tidak dikeluarkan. Oleh itu, a kebocoran memori akan terhasil.
Pengeluaran
2: Penunjuk Di Luar Skop
Apabila pembolehubah penunjuk wujud skopnya, a kebocoran memori berlaku dalam program C.
#include#include
int utama ( )
{
int nombor1 = 32 , nombor2 = 23 ;
{
int * jumlah = ( int * ) malloc ( saiz ( int ) ) ;
* jumlah = nombor1 + nombor2 ;
printf ( '%d \n ' , * jumlah ) ;
}
printf ( '%d \n ' , * jumlah ) ;
kembali 0 ;
}
Dalam program C di atas, the utama() fungsi menggunakan skop tempatan untuk memperuntukkan blok memori integer kepada jumlah pembolehubah penunjuk. Sejak kami menggunakan jumlah penunjuk untuk menetapkan penambahan a dan b kepada blok ingatan yang baru dibentuk, blok ingatan diperuntukkan secara berterusan walaupun selepas skop blok tamat. Oleh itu, a kebocoran memori akan berlaku.
Pengeluaran
Pengesanan Kebocoran Memori dalam C
Pengesanan dan pencegahan kebocoran ingatan adalah penting untuk mengekalkan kestabilan dan prestasi program. Untuk mengesan kebocoran ingatan , pengaturcara boleh menggunakan alat seperti Pintu pilihanraya , alat penyahpepijatan memori dan pemprofilan. Pintu pilihanraya membantu mengenal pasti kebocoran memori dengan menjejaki semua akses memori dalam program dan mengenal pasti apabila memori yang diperuntukkan tidak dikeluarkan.
Mencegah Kebocoran Memori dalam C
Untuk mengelakkan kebocoran ingatan , ikut arahan yang diberikan di bawah.
1: Sentiasa Keluarkan Memori yang Diperuntukkan
Memori hendaklah sentiasa dikeluarkan secara eksplisit menggunakan percuma() kaedah selepas ia telah diperuntukkan secara dinamik menggunakan fungsi seperti malloc(), calloc(), atau realloc() . Dengan melakukan ini, ia memastikan bahawa memori dikembalikan kepada sistem dan tersedia untuk kegunaan lain.
2: Memantau Memori yang Diperuntukkan
Memantau memori yang diperuntukkan adalah penting untuk memastikan ia dikeluarkan apabila ia tidak lagi diperlukan. Ini boleh dicapai dengan menjejaki setiap memori yang telah diperuntukkan dan melepaskannya apabila ia tidak lagi diperlukan.
3: Jejaki Penunjuk
Penunjuk harus dijejaki untuk mengurus peruntukan memori dan deallocation secara automatik, mengelakkan kebocoran memori.
4: Gunakan Alat Analisis Statik
Pada masa binaan, alat analisis statik boleh mengenal pasti kemungkinan kebocoran ingatan dalam program C, seperti Clang dan GCC. Sebelum aplikasi dijalankan, alatan ini boleh membantu dalam mengesan kemungkinan kebocoran memori dan membuat cadangan pembetulan.
Contoh berikut menggambarkan proses di atas.
#include#include
#include
int utama ( )
{
int * ptr = ( int * ) malloc ( saiz ( int ) ) ;
jika ( ptr == NULL ) {
printf ( 'Ralat peruntukan memori. \n ' ) ;
kembali 1 ;
}
* ptr = 10 ;
printf ( '%d \n ' , * ptr ) ;
percuma ( ptr ) ;
kembali 0 ;
}
Kod di atas ini mula-mula menentukan sama ada peruntukan memori berjaya dengan menyemak untuk melihat sama ada fail ptr rujukan tidak NULL . Kod mungkin mengendalikan ralat dengan sewajarnya jika peruntukan gagal. Jika peruntukan berjaya, kod memberikan blok memori nilai sebanyak 10 dan mengeluarkannya. Selepas itu, kod melepaskan memori yang diperuntukkan dengan menggunakan percuma() fungsi.
Pengeluaran
Kesimpulan
Kebocoran memori boleh menyebabkan masalah ketara dalam program, termasuk kemerosotan prestasi dan ranap sistem. Isu sebegini boleh dikenal pasti dan dicegah melalui pengurusan ingatan yang teliti, ujian yang betul dan pemantauan penggunaan memori. Oleh itu, pengaturcara mesti menyedari potensi kebocoran memori dan harus mengambil langkah yang perlu untuk mencegahnya.