Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

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.


Bahasa C

  1. Memahami ROM, PROM, EPROM, dan EEPROM: Desain, Pemrograman, dan Identifikasi
  2. Mikroprosesor: Evolusi Komputasi Program Tersimpan
  3. Menguasai Manajemen Memori C++: Penggunaan Ahli new dan delete
  4. Alokasi Memori Dinamis dalam C: Menguasai malloc, calloc, realloc, dan free
  5. Komentar Dokumentasi Java: Menguasai Javadoc dan Jenis Komentar
  6. Menguasai Memori Dinamis C++: Stack vs. Heap Dijelaskan
  7. Peningkatan Java 10: Alokasi Heap pada NV-DIMM dengan -XX:AllocateHeapAt
  8. Buku Panduan Definitif Manajemen Pemeliharaan: Panduan Praktis untuk Pemimpin
  9. Acara Manajemen Aset 2012: Konferensi, Pelatihan & Pameran Teratas
  10. 4 Tujuan Utama untuk Manajemen Aset yang Efektif