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 mengandung nilai-nilai sampah. Ini berpotensi menjadi risiko keamanan karena konten memori tidak dapat diprediksi dan kesalahan pemrograman dapat menyebabkan kebocoran konten ini.

Grafik perbandingan

Perbedaan - Kesamaan - grafik perbandingan calloc versus malloc
callocmalloc
Fungsi mengalokasikan 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 argumen 2 1
Sintaksis membatalkan * 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 diubah. yaitu, memori berisi nilai-nilai yang tidak dapat diprediksi atau sampah. Ini menghadirkan risiko.
Nilai pengembalian penunjuk 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.

Isi: calloc vs malloc

  • 1 Sintaks dan Contoh
    • 1.1 malloc ()
    • 1.2 calloc ()
  • 2 Video Menjelaskan Calloc, Malloc, dan Realloc
  • 3 Pertimbangan keamanan
  • 4 Kecepatan eksekusi
  • 5 Referensi

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:

/ * 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. * / 

Catat itu 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 dipegang elemen ukuran byte setiap. Wilayah yang dialokasikan diinisialisasi ke nol. Dalam contoh di atas:

/ * Alokasikan ruang untuk array dengan 15 elemen tipe int dan menginisialisasi 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

Tutorial video ini menjelaskan fungsi alokasi memori malloc, calloc dan realokasi, serta fungsi alokasi memori Gratis:

Pertimbangan keamanan

Ini umumnya ide yang baik untuk digunakan calloc lebih 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.

Referensi

  • calloc halaman manual
  • malloc halaman manual