calloc vs. Malloc
- 4338
- 274
- Mr. Miguel Schultz
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 -calloc | Malloc | |
---|---|---|
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.