Manajemen Memori Dinamis dalam C: calloc, malloc, dan free Dijelaskan
Bab ini menjelaskan manajemen memori dinamis dalam C. Bahasa pemrograman C menyediakan beberapa fungsi untuk alokasi dan manajemen memori. Fungsi-fungsi ini dapat ditemukan dalam file header <stdlib.h>.
| Sr.No. | Fungsi & Deskripsi |
| 1 | void *calloc(int num, int size); Fungsi ini mengalokasikan array dari num elemen yang masing-masing ukurannya dalam byte adalah size. |
| 2 | void free(void *address); Fungsi ini melepaskan blok memori yang ditentukan oleh address. |
| 3 | void *malloc(size_t size); Fungsi ini mengalokasikan array dari num byte dan membiarkannya tidak diinisialisasi. |
| 4 | void *realloc(void *address, int newsize); Fungsi ini mengalokasikan ulang memori dengan memperpanjangnya hingga newsize. |
Mengalokasikan Memori Secara Dinamis
Saat memrogram, jika Anda mengetahui ukuran array, maka mudah dan Anda dapat mendefinisikannya sebagai array. Misalnya, untuk menyimpan nama seseorang, dapat mencapai maksimal 100 karakter, jadi Anda dapat mendefinisikan sesuatu sebagai berikut −
char name[100];
Tetapi sekarang mari kita pertimbangkan situasi di mana Anda tidak memiliki ide tentang panjang teks yang perlu Anda simpan, misalnya, Anda ingin menyimpan deskripsi rinci tentang suatu topik. Di sini kita perlu mendefinisikan pointer ke karakter tanpa mendefinisikan berapa banyak memori yang diperlukan dan nanti, berdasarkan kebutuhan, kita dapat mengalokasikan memori seperti yang ditunjukkan dalam contoh di bawah ini −
Live Demo
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char name[100]; char *description; strcpy(name, "Zara Ali"); /* alokasi memori secara dinamis */ description = malloc( 200 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Kesalahan - tidak dapat mengalokasikan memori yang diperlukan\n"); } else { strcpy( description, "Zara ali seorang siswa DPS di kelas 10"); } printf("Nama = %s\n", name ); printf("Deskripsi: %s\n", description ); } Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut.
Nama = Zara Ali Deskripsi: Zara ali seorang siswa DPS di kelas 10
Program yang sama dapat ditulis menggunakan calloc(); hal yang Anda perlukan hanyalah mengganti malloc dengan calloc sebagai berikut −
calloc(200, sizeof(char));
Jadi Anda memiliki kontrol penuh dan dapat memberikan nilai ukuran apa saja saat mengalokasikan memori, tidak seperti array di mana setelah ukuran ditentukan, Anda tidak dapat mengubahnya.
Mengubah Ukuran dan Melepaskan Memori
Saat program Anda selesai, sistem operasi secara otomatis melepaskan semua memori yang dialokasikan oleh program Anda tetapi sebagai praktik yang baik ketika Anda tidak lagi membutuhkan memori, maka Anda harus melepaskan memori tersebut dengan memanggil fungsi free().
Secara alternatif, Anda dapat meningkatkan atau mengurangi ukuran blok memori yang dialokasikan dengan memanggil fungsi realloc(). Mari kita periksa program di atas sekali lagi dan manfaatkan fungsi realloc() dan free() −
Live Demo
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char name[100]; char *description; strcpy(name, "Zara Ali"); /* alokasi memori secara dinamis */ description = malloc( 30 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Kesalahan - tidak dapat mengalokasikan memori yang diperlukan\n"); } else { strcpy( description, "Zara ali seorang siswa DPS."); } /* anggaplah Anda ingin menyimpan deskripsi yang lebih besar */ description = realloc( description, 100 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Kesalahan - tidak dapat mengalokasikan memori yang diperlukan\n"); } else { strcat( description, "Dia ada di kelas 10"); } printf("Nama = %s\n", name ); printf("Deskripsi: %s\n", description ); /* lepaskan memori menggunakan fungsi free() */ free(description); } Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut.
Nama = Zara Ali Deskripsi: Zara ali seorang siswa DPS.Dia ada di kelas 10
Anda dapat mencoba contoh di atas tanpa mengalokasikan ulang memori tambahan, dan fungsi strcat() akan menghasilkan kesalahan karena kurangnya memori yang tersedia dalam description.