Apakah itu Kebocoran Memori dalam Pengaturcaraan C

Apakah Itu Kebocoran Memori Dalam Pengaturcaraan C



Asas pengaturcaraan termasuk pengurusan memori, terutamanya dalam bahasa seperti C tanpa pengumpul sampah terbina. Kebocoran memori adalah masalah biasa dalam bahasa sedemikian, dan ia menyebabkan program menggunakan lebih banyak memori sehingga program ranap kerana kekurangan ingatan. Apabila perisian gagal mengeluarkan memori yang tidak diperlukan lagi, memori tersebut diperuntukkan dan tidak digunakan, mengakibatkan kebocoran memori .

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.