calloc vs. Malloc

calloc vs. Malloc

Kapan calloc digunakan untuk mengalokasikan blok memori, wilayah yang dialokasikan diinisialisasi ke nol. Sebaliknya, Malloc tidak menyentuh isi blok memori yang dialokasikan, yang berarti berisi nilai sampah. Ini berpotensi menjadi risiko keamanan karena isi memori tidak dapat diprediksi dan kesalahan pemrograman dapat mengakibatkan kebocoran konten ini.

Grafik perbandingan

Perbedaan - Persamaan - Bagan Perbandingan Calloc versus Malloc
callocMalloc
Fungsi mengalokasikan wilayah memori yang cukup besar untuk menahan "elemen n" dari "ukuran" byte masing -masing. Juga menginisialisasi konten memori ke nol. Mengalokasikan byte "ukuran" memori.
Jumlah argumen 2 1
Sintaksis void *calloc (number_of_blocks, size_of_each_block_in_bytes); void *malloc (size_in_bytes);
Isi memori yang dialokasikan Wilayah yang dialokasikan diinisialisasi ke nol. Isi memori yang dialokasikan tidak berubah. Saya.e., Memori berisi nilai sampah yang tidak dapat diprediksi atau. Ini menyajikan risiko.
Nilai pengembalian void pointer (void *). Jika alokasi berhasil, pointer ke blok memori dikembalikan. Jika alokasi memori gagal, penunjuk nol dikembalikan. void pointer (void *). Jika alokasi berhasil, pointer ke blok memori dikembalikan. Jika alokasi memori gagal, penunjuk nol dikembalikan.

Sintaks dan contoh

malloc ()

void *malloc (size_t size); 

mengalokasikan ukuran byte memori. Jika alokasi berhasil, pointer ke memori yang dialokasikan dikembalikan. Jika tidak BATAL dikembalikan. Contoh:

/* Mengalokasikan memori untuk array dengan 15 elemen jenis int. */ int *ptr = malloc (15 *sizeof (int)); if (ptr == null)  /* memori tidak dapat dialokasikan, jadi cetak kesalahan dan keluar. */ fprintf (stderr, "tidak bisa mengalokasikan memori \ n"); EXIT (EXIT_FAILURE);  /* Alokasi berhasil. */ 

Perhatikan itu Malloc mengharuskan kita menghitung byte memori yang kita butuhkan, dan lulus itu sebagai argumen untuk malloc.

calloc ()

void *calloc (size_t nelements, size_t bytes); 

Mengalokasikan blok memori yang berdekatan yang cukup besar untuk ditahan Nelements ukuran byte setiap. Wilayah yang dialokasikan diinisialisasi ke nol. Dalam contoh di atas:

/* Mengalokasikan ruang untuk array dengan 15 elemen jenis int dan menginisialisasi ke nol. */ int *ptr = calloc (15, sizeof (int)); if (ptr == null)  /* memori tidak dapat dialokasikan, jadi cetak kesalahan dan keluar. */ fprintf (stderr, "tidak bisa mengalokasikan memori \ n"); EXIT (EXIT_FAILURE);  /* Alokasi berhasil. */ 

calloc (m, n) sama dengan

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

Video menjelaskan calloc, malloc, dan realloc

Tutorial video ini menjelaskan fungsi alokasi memori Malloc, calloc Dan Realloc, serta fungsi de-alokasi memori bebas:

Pertimbangan keamanan

Ini umumnya merupakan ide yang baik untuk digunakan calloc lebih Malloc. Saat Anda menggunakan malloc, isi memori yang dialokasikan tidak dapat diprediksi. Kesalahan pemrograman dapat menyebabkan konten memori ini bocor dengan cara yang tidak disengaja tetapi sangat rentan. Contoh yang baik dari kebocoran seperti itu adalah kerentanan yang memilukan di Openssl, mekanisme dasar yang dijelaskan dalam komik XKCD ini dan beberapa detail teknis lebih banyak ada dalam posting blog ini.

Kecepatan eksekusi

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