Malloc () vs calloc (): Perbedaan Utama dijelaskan dengan Contoh

Daftar Isi:

Anonim

Sebelum mempelajari perbedaan antara malloc dan calloc mari kita pelajari-

Apa itu Alokasi Memori Dinamis?

Alokasi memori dinamis adalah proses mengalokasikan memori pada waktu berjalan. Ada empat rutinitas pustaka, calloc (), free (), realloc (), dan malloc () yang dapat digunakan untuk mengalokasikan memori dan membebaskannya selama eksekusi program. Rutinitas ini didefinisikan dalam file header yang disebut stdlib.h.

Apa itu malloc ()?

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. Ini berarti kita dapat menetapkan fungsi malloc ke pointer manapun. Bentuk lengkap malloc adalah alokasi memori.

Dalam tutorial ini, Anda akan mempelajari:

  • Apa itu Alokasi Memori Dinamis?
  • Apa itu malloc ()?
  • Apa itu calloc ()?
  • Mengapa menggunakan malloc ()?
  • Mengapa menggunakan calloc ()?
  • Sintaks malloc ()
  • Sintaks calloc ()
  • Contoh malloc () di C
  • Contoh calloc () di C
  • Perbedaan Antara calloc () dan malloc ()

Apa itu calloc ()?

Fungsi Calloc () digunakan untuk mengalokasikan beberapa blok memori. Ini adalah fungsi alokasi memori dinamis yang digunakan untuk mengalokasikan memori ke struktur data kompleks seperti array dan struktur. Jika fungsi ini gagal mengalokasikan ruang yang cukup seperti yang ditentukan, fungsi ini akan mengembalikan pointer nol. Bentuk lengkap dari fungsi calloc adalah alokasi yang berdekatan.

Mengapa menggunakan malloc ()?

Berikut alasan menggunakan malloc ()

  • Anda harus menggunakan malloc () ketika Anda harus mengalokasikan memori pada waktu proses.
  • Anda harus menggunakan malloc ketika Anda harus mengalokasikan objek yang harus ada di luar eksekusi blok memori saat ini.
  • Gunakan malloc () jika Anda perlu mengalokasikan memori yang lebih besar dari ukuran tumpukan itu.
  • Ini mengembalikan pointer ke byte pertama dari ruang yang dialokasikan.
  • Ini memungkinkan pengembang untuk mengalokasikan memori sesuai kebutuhan dalam jumlah yang tepat.
  • Fungsi ini mengalokasikan ukuran blok memori byte dari heap.

Mengapa menggunakan calloc ()?

Berikut alasan menggunakan calloc ()

  • Ketika Anda harus mengatur memori yang dialokasikan ke nol.
  • Anda dapat menggunakan calloc yang mengembalikan pointer untuk mendapatkan akses ke heap memori.
  • Digunakan saat Anda perlu menginisialisasi elemen ke nol untuk mengembalikan pointer ke memori.
  • Untuk mencegah overflow yang mungkin dilakukan dengan malloc ()
  • Gunakan calloc () untuk meminta halaman yang diketahui sudah menjadi nol.

Sintaks malloc ()

Berikut adalah Sintaks malloc ()

ptr = (cast_type *) malloc (byte_size);

Dalam sintaks di atas, ptr adalah pointer dari cast_type. Fungsi malloc mengembalikan pointer ke memori yang dialokasikan dari byte_size.

Example: ptr = (int *) malloc (50)

Ketika pernyataan ini berhasil dijalankan, ruang memori 50 byte dicadangkan. Alamat dari byte pertama dari ruang yang dicadangkan ditetapkan ke penunjuk "ptr" dari tipe int.

Sintaks calloc ()

Berikut adalah Sintaks malloc ()

ptr = (cast_type *) calloc (n, size);

Sintaks di atas digunakan untuk mengalokasikan n blok memori dengan ukuran yang sama. Setelah ruang memori dialokasikan, semua byte diinisialisasi ke nol. Pointer, yang saat ini berada di byte pertama dari ruang memori yang dialokasikan, dikembalikan.

Contoh malloc () di C

Dalam kode di bawah ini, sizeof (* ptr) digunakan untuk mengalokasikan blok memori 15 bilangan bulat. Dalam pernyataan printf, kami menemukan nilai dari bilangan bulat ke-6.

#include#includeint main(){int *ptr;ptr = malloc(15 * sizeof(*ptr));if (ptr != NULL) {*(ptr + 5) = 480;printf("Value of the 6th integer is %d",*(ptr + 5));}}

Keluaran:

Nilai dari bilangan bulat ke-6 adalah 480

Contoh calloc () di C

Program bahasa C di bawah ini menghitung jumlah dari sepuluh suku pertama. Jika nilai pointer jika null, maka ruang memori tidak akan dialokasikan.

For loop digunakan untuk mengulang nilai variabel "i" dan mencetak jumlahnya. Terakhir, fungsi bebas digunakan untuk membebaskan penunjuk.

#include #include 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;}

Keluaran:

Membangun dan menghitung jumlah barisan dari 10 suku pertama n Jumlah = 45

Perbedaan Antara calloc () dan malloc ()

Herer adalah perbedaan penting antara malloc () dan calloc ():

malloc () calloc ()
Fungsi Malloc () akan membuat satu blok memori dengan ukuran yang ditentukan oleh pengguna. Fungsi Calloc () dapat menetapkan beberapa blok memori untuk sebuah variabel.
Fungsi Malloc berisi nilai sampah. Blok memori yang dialokasikan oleh fungsi calloc selalu diinisialisasi ke nol.
Jumlah argumen adalah 2. Jumlah argumen adalah 1.
Calloc lebih lambat dari malloc. Malloc lebih cepat dari calloc.
Ini tidak aman dibandingkan dengan calloc. Ini aman digunakan dibandingkan dengan malloc.
Efisiensi waktu lebih tinggi dari calloc (). Efisiensi waktu lebih rendah dari malloc ().
Fungsi Malloc () hanya mengembalikan alamat awal dan tidak menjadikannya nol. Sebelum mengalokasikan alamat, fungsi Calloc () mengembalikan alamat awal dan menjadikannya nol.
Itu tidak melakukan inisialisasi memori. Ini melakukan inisialisasi memori.

PERBEDAAN UTAMA:

  • Fungsi malloc () hanya mengembalikan alamat awal dan tidak menjadikannya nol di sisi lain, fungsi calloc () mengembalikan alamat awal dan menjadikannya nol.
  • Pada fungsi malloc jumlah argumennya adalah 2 sedangkan pada fungsi calloc jumlah argumennya adalah 1.
  • efisiensi waktu malloc () lebih tinggi dari calloc () sedangkan malloc () tidak aman dibandingkan dengan calloc ()
  • malloc tidak menginisialisasi memori sedangkan calloc melakukan inisialisasi memori.