Dalam pengaturcaraan, adalah perlu untuk menyimpan data. Data disimpan dalam memori. Lokasi memori ini dikenali sebagai pembolehubah. Setiap pemboleh ubah mempunyai jenis tertentu. Mereka boleh menjadi bilangan bulat, terapung, beregu, watak dan sebagainya. Terdapat juga struktur data yang boleh menyimpan kumpulan-kumpulan yang bersaiz tetap dari jenis yang sama. Ia adalah array. Pengaturcara perlu mengisytiharkan saiz array. Jika programmer mengisytiharkan pelbagai bilangan bulat untuk lima unsur, tidak mungkin untuk memberikan nilai kepada indeks yang lebih tinggi daripada saiz yang diisytiharkan. Peruntukan memori ditetapkan, dan ia tidak boleh diubah pada masa larian. Kaedah peruntukan memori lain adalah peruntukan memori dinamik. Peruntukan memori dinamik membantu untuk memperuntukkan lebih banyak memori apabila diperlukan dan dibebaskan apabila perlu. Fail header mempunyai empat fungsi untuk peruntukan memori dinamik. calloc dan malloc adalah dua fungsi sedemikian. The perbezaan utama antara calloc dan malloc adalah itu calloc mengalokasikan memori dan juga menginisialisasi blok memori yang diperuntukkan kepada sifar sedangkan malloc memperuntukkan memori tetapi tidak menginisialisasi memori yang diperuntukkan kepada sifar. Mengakses kandungan dalam calloc akan memberi sifar, tetapi malloc akan memberikan nilai sampah.
1. Gambaran Keseluruhan dan Perbezaan Utama
2. Apa itu calloc
3. Apa itu malloc
4. Persamaan Antara calloc dan malloc
5. Side by Side Comparison - calloc vs malloc dalam Borang Tabular
6. Ringkasan
Peruntukan memori adalah proses memberikan memori untuk melaksanakan program. Kadang-kadang perlu mengubah saiz ingatan. Oleh itu, peruntukan memori dinamik digunakan. Ia dilakukan dengan menggunakan petunjuk. Penunjuk adalah pembolehubah rujukan yang memegang alamat pembolehubah lain.
Rajah 01: calloc dan malloc
calloc bermaksud "peruntukan bersebelahan". Ia memperuntukkan pelbagai blok ingatan dengan saiz yang sama. Sintaks untuk calloc adalah seperti berikut. Ia mengambil masa dua argumen. Mereka adalah bilangan blok dan saiz setiap blok. Fungsi calloc mengembalikan penunjuk void, jadi operator pemanggil digunakan untuk mengembalikan jenis penunjuk sesuai dengan jenis data yang diperlukan.
void * calloc (size_t num, saiz size_t);
Rujuk program C di bawah ini mudah.
#include
#include
int main ()
int ptr * = (int *) calloc (20, sizeof (int));
jika (ptr == NULL)
printf ("Memori tidak diperuntukkan");
lain
printf ("Memori diperuntukkan");
kembali 0;
Menurut program di atas, blok memori yang bersambung yang boleh memegang 20 elemen diperuntukkan. Setiap akan mempunyai saiz integer. The sizeof (int) digunakan kerana jenis integer berbeza dari compiler hingga compiler.
Jika peruntukan memori berjaya, ia akan mengembalikan alamat asas blok memori. Ini bermakna ptr penunjuk sekarang menunjuk ke alamat asas blok memori itu. Semua kawasan diperuntukkan diasaskan kepada nol. Ia akan mencetak mesej Memesan Alokasi. Jika peruntukan memori tidak berjaya, ia akan mengembalikan penunjuk null. Oleh itu, ia akan mencetak Memori tidak diperuntukkan mesej.
Fungsi malloc digunakan untuk memperuntukkan jumlah bait yang diperlukan dalam ingatan. Sintaks untuk malloc adalah seperti berikut. Saiz mewakili memori yang diperlukan dalam bait.
void * malloc (size_t_size);
Fungsi malloc mengembalikan penunjuk void, jadi pengendali pemula digunakan untuk mengembalikan jenis penunjuk sesuai dengan jenis data yang diperlukan.
Rujuk program C di bawah mudah dengan fungsi malloc.
#include
#include
int main ()
int ptr * = (int *) malloc (10 * sizeof (int));
jika (ptr == NULL)
printf ("Memori tidak diperuntukkan");
lain
printf ("Memori diperuntukkan");
kembali 0;
Menurut program di atas, blok ingatan akan diperuntukkan. Penunjuk menunjuk ke alamat permulaan memori yang diperuntukkan. Penunjuk yang dikembalikan ditukarkan kepada jenis integer. Jika memori diperuntukkan, ia akan mencetak memori yang diperuntukkan mesej. Sekiranya memori tidak diperuntukkan, penunjuk null akan kembali. Oleh itu, memori tidak diperuntukkan mesej akan dicetak.
calloc vs malloc | |
calloc adalah fungsi untuk peruntukan memori dinamik dalam bahasa header stdlib.h bahasa C yang memperuntukkan bilangan bait tertentu dan menginisialisasinya menjadi sifar. | malloc adalah fungsi untuk peruntukan memori dinamik dalam bahasa header stdlib.h bahasa C yang memperuntukkan bilangan bait tertentu. |
Makna | |
calloc bermaksud peruntukan bersebelahan. | malloc bermaksud peruntukan ingatan. |
Sintaks | |
calloc mengikuti sintaks yang sama dengan void * calloc (size_t_num, ukuran size_t); | malloc mengikuti sintaks yang sama dengan void * malloc (size_t_size);. |
Bilangan Argumen | |
calloc mengambil dua hujah. Mereka adalah beberapa blok dan saiz setiap blok. | malloc mengambil satu hujah. Ia adalah beberapa bait. |
Kelajuan | |
calloc mengambil sedikit masa lebih lama daripada malloc. Ini adalah kerana langkah tambahan memulakan memori yang diperuntukkan dengan sifar. | malloc lebih cepat daripada calloc. |
Dalam peruntukan memori statik seperti kita menggunakan tatasusunan, ingatan tetap. Jika beberapa elemen disimpan, maka memori yang lain dibazirkan. Ia juga mungkin menyebabkan kesilapan apabila memori yang diperuntukkan adalah kecil daripada memori yang diperlukan. Oleh itu, peruntukan memori dinamik digunakan. Dalam bahasa C, calloc dan malloc menyediakan peruntukan memori dinamik. Perbezaan antara calloc dan malloc adalah calloc yang mengagihkan memori dan juga memulakan blok memori yang diperuntukkan kepada sifar sementara malloc memperuntukkan memori tetapi tidak memulakan blok ingatan menjadi sifar. Malloc mengambil dua argumen manakala calloc mengambil dua hujah.
Anda boleh memuat turun versi PDF artikel ini dan menggunakannya untuk tujuan luar seperti peringatan kutipan. Sila muat turun versi PDF di sini: Perbezaan Antara calloc dan malloc
1.Kumar, Krishan. "Perbezaan Antara Malloc dan Calloc di C." Cs-Fundamentals.com, Cs-Fundamentals.com. Terdapat di sini
2. "Peruntukan memori dinamik." Wikipedia, Yayasan Wikimedia, 13 Januari 2018. Boleh didapati di sini
3. "Calloc () berbanding malloc ()." GeeksforGeeks, 14 Jun 2017. Boleh didapati di sini