calloc vs. malloc

Ketika calloc digunakan untuk mengalokasikan blok memori, wilayah yang dialokasikan diinisialisasi ke nol. Sebaliknya, malloc tidak menyentuh konten blok memori yang dialokasikan, yang berarti mengandung nilai sampah. Ini berpotensi menjadi risiko keamanan karena konten memori tidak dapat diprediksi dan kesalahan pemrograman dapat menyebabkan kebocoran konten ini.

Grafik perbandingan

grafik perbandingan calloc versus malloc
calloc malloc
Fungsimengalokasikan wilayah memori yang cukup besar untuk menampung masing-masing "n elemen" dari "ukuran" byte. Juga menginisialisasi isi memori menjadi nol.mengalokasikan "size" byte memori.
Jumlah argumen21
Sintaksismembatalkan * calloc (number_of_blocks, size_of_each_block_in_bytes);void * malloc (size_in_bytes);
Isi memori yang dialokasikanWilayah yang dialokasikan diinisialisasi ke nol.Isi memori yang dialokasikan tidak diubah. yaitu, memori berisi nilai-nilai yang tidak terduga atau sampah. Ini menghadirkan risiko.
Nilai pengembalianpenunjuk kosong (batal *). Jika alokasi berhasil, pointer ke blok memori dikembalikan. Jika alokasi memori gagal, pointer NULL dikembalikan.penunjuk kosong (batal *). Jika alokasi berhasil, pointer ke blok memori dikembalikan. Jika alokasi memori gagal, pointer NULL dikembalikan.

Sintaks dan Contoh

malloc ()

 void * malloc (size_t size); 

mengalokasikan size byte memori. Jika alokasi berhasil, pointer ke memori yang dialokasikan dikembalikan. Kalau tidak, NULL dikembalikan. Contoh:

 / * Alokasikan memori untuk array dengan 15 elemen tipe int . * / int * ptr = malloc (15 * sizeof (int)); if (ptr == NULL) {/ * Memory tidak dapat dialokasikan, jadi cetak kesalahan dan keluar. * / fprintf (stderr, "Tidak dapat mengalokasikan memori \ n"); keluar (EXIT_FAILURE); } / * Alokasi berhasil. * / 

Perhatikan bahwa malloc mengharuskan kita menghitung byte memori yang kita butuhkan, dan meneruskannya sebagai argumen ke malloc.

calloc ()

 membatalkan * calloc (size_t nelements, size_t bytes); 

mengalokasikan blok memori yang berdekatan yang cukup besar untuk menampung masing-masing nelements ukuran bytes . Wilayah yang dialokasikan diinisialisasi ke nol. Dalam contoh di atas:

 / * Alokasikan ruang untuk array dengan 15 elemen tipe int dan inisialisasi ke nol. * / int * ptr = calloc (15, sizeof (int)); if (ptr == NULL) {/ * Memory tidak dapat dialokasikan, jadi cetak kesalahan dan keluar. * / fprintf (stderr, "Tidak dapat mengalokasikan memori \ n"); keluar (EXIT_FAILURE); } / * Alokasi berhasil. * / 

calloc (m, n) sama dengan

 p = malloc (m * n); jika (p) memset (p, 0, m * n); 

Video Menjelaskan Calloc, Malloc, dan Realloc

Video tutorial ini menjelaskan fungsi alokasi memori malloc, calloc dan realloc, serta fungsi alokasi memori yang free :

Pertimbangan keamanan

Biasanya adalah ide yang baik untuk menggunakan calloc over malloc . Saat Anda menggunakan malloc, konten memori yang dialokasikan tidak dapat diprediksi. Kesalahan pemrograman dapat menyebabkan isi memori ini bocor dengan cara yang tidak disengaja tetapi sangat rentan. Contoh yang baik dari kebocoran tersebut adalah kerentanan Heartbleed di OpenSSL, mekanisme dasar yang dijelaskan dalam komik XKCD ini dan beberapa detail teknis lainnya ada di posting blog ini.

Kecepatan eksekusi

calloc sedikit lebih lambat dari malloc karena langkah ekstra menginisialisasi wilayah memori yang dialokasikan. Namun, dalam praktiknya perbedaan kecepatan sangat kecil dan dapat diabaikan.

Artikel Terkait