Bahasa C
Sebelum Anda mempelajari alokasi Memori Dinamis C, mari kita pahami:
Saat Anda mendeklarasikan variabel menggunakan tipe data dasar, kompiler C secara otomatis mengalokasikan ruang memori untuk variabel dalam kumpulan memori yang disebut tumpukan .
Misalnya, variabel float biasanya membutuhkan 4 byte (berdasarkan platform) saat dideklarasikan. Kami dapat memverifikasi informasi ini menggunakan sizeof operator seperti yang ditunjukkan pada contoh di bawah ini
#include <stdio.h> int main() { float x; printf("The size of float is %d bytes", sizeof(x)); return 0;}
Outputnya adalah:
The size of float is 4 bytes
Juga, array dengan ukuran tertentu dialokasikan dalam blok memori yang berdekatan, setiap blok memiliki ukuran untuk satu elemen:
#include <stdio.h> int main() { float arr[10]; printf("The size of the float array with 10 element is %d", sizeof(arr)); return 0;}
Hasilnya adalah:
The size of the float array with 10 element is 40
Seperti yang telah dipelajari sejauh ini, saat mendeklarasikan tipe data dasar atau array, memori secara otomatis dikelola. Namun, ada proses untuk mengalokasikan memori di C yang akan memungkinkan Anda untuk mengimplementasikan program di mana ukuran array tidak ditentukan sampai Anda menjalankan program Anda (runtime). Proses ini disebut “Alokasi memori dinamis .”
Dalam tutorial ini, Anda akan belajar-
Alokasi Memori Dinamis adalah alokasi manual dan pembebasan memori sesuai dengan kebutuhan pemrograman Anda. Memori dinamis dikelola dan disajikan dengan pointer yang menunjuk ke ruang memori yang baru dialokasikan di area yang kita sebut heap.
Sekarang Anda dapat membuat dan menghancurkan array elemen secara dinamis saat runtime tanpa masalah. Singkatnya, manajemen memori otomatis menggunakan tumpukan, dan Alokasi Memori Dinamis C menggunakan tumpukan.
Pustaka
Mari kita bahas fungsi-fungsi di atas beserta aplikasinya
Fungsi C malloc() adalah singkatan dari alokasi memori. Ini adalah fungsi yang digunakan untuk mengalokasikan blok memori secara dinamis. Ini mencadangkan ruang memori dengan ukuran tertentu dan mengembalikan pointer nol yang menunjuk ke lokasi memori. Pointer yang dikembalikan biasanya bertipe void. Artinya, kita dapat menetapkan fungsi C malloc() ke pointer mana pun.
Sintaks malloc() Fungsi:
ptr = (cast_type *) malloc (byte_size);
Di sini,
Contoh malloc():
Example: ptr = (int *) malloc (50)
Ketika pernyataan ini berhasil dieksekusi, ruang memori sebesar 50 byte dicadangkan. Alamat byte pertama dari ruang yang dicadangkan diberikan ke pointer ptr bertipe int.
Pertimbangkan contoh lain:
#include <stdlib.h> int main(){ int *ptr; ptr = malloc(15 * sizeof(*ptr)); /* a block of 15 integers */ if (ptr != NULL) { *(ptr + 5) = 480; /* assign 480 to sixth integer */ printf("Value of the 6th integer is %d",*(ptr + 5)); } }
Keluaran:
Value of the 6th integer is 480
Fungsi Malloc() juga dapat digunakan dengan tipe data karakter serta tipe data kompleks seperti struktur.
Memori untuk variabel secara otomatis tidak dialokasikan pada waktu kompilasi. Dalam alokasi memori dinamis, Anda harus membatalkan alokasi memori secara eksplisit. Jika tidak dilakukan, Anda mungkin mengalami kesalahan memori.
Gratis() fungsi dipanggil untuk melepaskan/mengalokasikan memori di C. Dengan mengosongkan memori di program Anda, Anda membuat lebih banyak tersedia untuk digunakan nanti.
Misalnya:
#include <stdio.h> int main() { int* ptr = malloc(10 * sizeof(*ptr)); if (ptr != NULL){ *(ptr + 2) = 50; printf("Value of the 2nd integer is %d",*(ptr + 2)); } free(ptr); }
Keluaran
Value of the 2nd integer is 50
Fungsi C calloc() adalah singkatan dari alokasi bersebelahan. Fungsi ini digunakan untuk mengalokasikan beberapa blok memori. Ini adalah fungsi alokasi memori dinamis yang digunakan untuk mengalokasikan memori ke struktur data yang kompleks seperti array dan struktur.
Fungsi Malloc() digunakan untuk mengalokasikan satu blok ruang memori sedangkan calloc() dalam C digunakan untuk mengalokasikan beberapa blok ruang memori. Setiap blok yang dialokasikan oleh fungsi calloc() memiliki ukuran yang sama.
Sintaks fungsi calloc():
ptr = (cast_type *) calloc (n, size);
Setiap kali ada kesalahan mengalokasikan ruang memori seperti kekurangan memori, maka pointer nol dikembalikan.
Contoh calloc():
Program di bawah ini menghitung jumlah barisan aritmatika.
#include <stdio.h> int main() { int i, * ptr, sum = 0; ptr = calloc(10, sizeof(int)); if (ptr == NULL) { printf("Error! memory not allocated."); exit(0); } printf("Building and calculating the sequence sum of the first 10 terms \ n "); for (i = 0; i < 10; ++i) { * (ptr + i) = i; sum += * (ptr + i); } printf("Sum = %d", sum); free(ptr); return 0; }
Hasil:
Building and calculating the sequence sum of the first 10 terms Sum = 45
Berikut ini adalah perbedaan utama antara malloc() Vs calloc() di C:
Fungsi calloc() umumnya lebih cocok dan efisien daripada fungsi malloc(). Sementara kedua fungsi tersebut digunakan untuk mengalokasikan ruang memori, calloc() dapat mengalokasikan beberapa blok sekaligus. Anda tidak perlu meminta blok memori setiap saat. Fungsi calloc() digunakan dalam struktur data kompleks yang membutuhkan ruang memori yang lebih besar.
Blok memori yang dialokasikan oleh calloc() di C selalu diinisialisasi ke nol sementara di fungsi malloc() di C, selalu berisi nilai sampah.
Menggunakan C realloc() fungsi, Anda dapat menambahkan lebih banyak ukuran memori ke memori yang sudah dialokasikan. Ini memperluas blok saat ini sambil membiarkan konten asli apa adanya. realloc() dalam C adalah singkatan dari realokasi memori.
realloc() juga dapat digunakan untuk mengurangi ukuran memori yang dialokasikan sebelumnya.
Sintaks fungsi realloc():
ptr = realloc (ptr,newsize);
Pernyataan di atas mengalokasikan ruang memori baru dengan ukuran tertentu dalam variabel ukuran baru. Setelah menjalankan fungsi, pointer akan dikembalikan ke byte pertama dari blok memori. Ukuran baru bisa lebih besar atau lebih kecil dari memori sebelumnya. Kami tidak dapat memastikan apakah blok yang baru dialokasikan akan menunjuk ke lokasi yang sama dengan blok memori sebelumnya. Fungsi ini akan menyalin semua data sebelumnya di wilayah baru. Itu memastikan bahwa data akan tetap aman.
Contoh realoc():
#include <stdio.h> int main () { char *ptr; ptr = (char *) malloc(10); strcpy(ptr, "Programming"); printf(" %s, Address = %u\n", ptr, ptr); ptr = (char *) realloc(ptr, 20); //ptr is reallocated with new size strcat(ptr, " In 'C'"); printf(" %s, Address = %u\n", ptr, ptr); free(ptr); return 0; }
Setiap kali realloc() di C menghasilkan operasi yang gagal, ia mengembalikan pointer nol, dan data sebelumnya juga dibebaskan.
Array Dinamis dalam C memungkinkan jumlah elemen bertambah sesuai kebutuhan. C Array dinamis banyak digunakan dalam algoritma ilmu komputer.
Dalam program berikut, kami telah membuat dan mengubah ukuran array Dinamis di C
#include <stdio.h> int main() { int * arr_dynamic = NULL; int elements = 2, i; arr_dynamic = calloc(elements, sizeof(int)); //Array with 2 integer blocks for (i = 0; i < elements; i++) arr_dynamic[i] = i; for (i = 0; i < elements; i++) printf("arr_dynamic[%d]=%d\n", i, arr_dynamic[i]); elements = 4; arr_dynamic = realloc(arr_dynamic, elements * sizeof(int)); //reallocate 4 elements printf("After realloc\n"); for (i = 2; i < elements; i++) arr_dynamic[i] = i; for (i = 0; i < elements; i++) printf("arr_dynamic[%d]=%d\n", i, arr_dynamic[i]); free(arr_dynamic); }
Hasil program C Dynamic array di layar:
arr_dynamic[0]=0 arr_dynamic[1]=1 After realloc arr_dynamic[0]=0 arr_dynamic[1]=1 arr_dynamic[2]=2 arr_dynamic[3]=3
Bahasa C
Sebelum mempelajari perbedaan antara malloc dan calloc mari kita pelajari- Apa itu Alokasi Memori Dinamis? Alokasi memori dinamis adalah proses pengalokasian memori pada saat dijalankan. Ada empat rutin perpustakaan, calloc(), free(), realloc(), dan malloc() yang dapat digunakan untuk mengalokasika
Apa itu malloc di C? Fungsi malloc() adalah singkatan dari alokasi memori. Ini adalah fungsi yang digunakan untuk mengalokasikan blok memori secara dinamis. Ini mencadangkan ruang memori dengan ukuran tertentu dan mengembalikan pointer nol yang menunjuk ke lokasi memori. Pointer yang dikembalikan b
Apa itu Memori Tumpukan? Stack di java adalah bagian dari memori yang berisi metode, variabel lokal, dan variabel referensi. Memori tumpukan selalu direferensikan dalam urutan Last-In-First-Out. Variabel lokal dibuat di tumpukan. Apa itu Memori Heap? Heap adalah bagian dari memori yang berisi Obje
Abstrak Surat ini menyajikan fungsi ganda termasuk pemilih dan pengalihan memori dalam V/SiOx /AlOy /p++ Perangkat memori resistif hanya dengan mengontrol batas arus kepatuhan (CCL). Peralihan ambang batas searah diamati setelah pembentukan positif dengan CCL rendah 1 μA. Pergeseran ke sisi elekt