Malloc () vs calloc (): Perbezaan Utama yang dijelaskan dengan Contoh

Isi kandungan:

Anonim

Sebelum mengetahui perbezaan antara malloc dan calloc mari belajar-

Apa itu Peruntukan Memori Dinamik?

Peruntukan memori dinamik adalah proses pengagihan memori pada masa berjalan. Terdapat empat rutin perpustakaan, calloc (), free (), realloc (), dan malloc () yang dapat digunakan untuk mengalokasikan memori dan membebaskannya selama pelaksanaan program. Rutin ini didefinisikan dalam file header yang disebut stdlib.h.

Apa itu malloc ()?

Ini adalah fungsi yang digunakan untuk mengalokasikan blok memori secara dinamis. Ia menyimpan ruang memori dengan ukuran yang ditentukan dan mengembalikan penunjuk nol yang menunjuk ke lokasi memori.

Penunjuk yang dikembalikan biasanya tidak sah. Ini bermaksud bahawa kita dapat menetapkan fungsi malloc ke penunjuk mana pun. Bentuk malloc yang lengkap adalah peruntukan memori.

Dalam tutorial ini, anda akan belajar:

  • Apa itu Peruntukan Memori Dinamik?
  • Apa itu malloc ()?
  • Apa itu calloc ()?
  • Mengapa menggunakan malloc ()?
  • Mengapa menggunakan calloc ()?
  • Sintaks malloc ()
  • Sintaks calloc ()
  • Contoh malloc () di C
  • Contoh calloc () di C
  • Perbezaan Antara calloc () dan malloc ()

Apa itu calloc ()?

Fungsi Calloc () digunakan untuk memperuntukkan banyak blok memori. Ini adalah fungsi peruntukan memori dinamik yang digunakan untuk mengalokasikan memori ke struktur data yang kompleks seperti susunan dan struktur. Sekiranya fungsi ini gagal memperuntukkan ruang yang mencukupi seperti yang ditentukan, ia akan mengembalikan pointer. Bentuk lengkap fungsi calloc adalah peruntukan bersebelahan.

Mengapa menggunakan malloc ()?

Berikut adalah sebab penggunaan malloc ()

  • Anda harus menggunakan malloc () ketika anda harus memperuntukkan memori pada waktu runtime.
  • Anda harus menggunakan malloc apabila anda harus memperuntukkan objek yang mesti ada di luar pelaksanaan blok memori semasa.
  • Pergi ke malloc () jika anda perlu memperuntukkan memori lebih besar daripada ukuran timbunan itu.
  • Ia mengembalikan penunjuk ke bait pertama ruang yang diperuntukkan.
  • Ini membolehkan pemaju mengalokasikan memori kerana diperlukan dalam jumlah yang tepat.
  • Fungsi ini memperuntukkan ukuran blok memori byte dari timbunan.

Mengapa menggunakan calloc ()?

Berikut adalah sebab penggunaan calloc ()

  • Apabila anda harus menetapkan memori yang diperuntukkan menjadi sifar.
  • Anda boleh menggunakan calloc yang mengembalikan penunjuk untuk mendapatkan akses ke timbunan memori.
  • Digunakan apabila anda perlu menginisialisasi elemen menjadi sifar untuk mengembalikan penunjuk ke memori.
  • Untuk mengelakkan limpahan yang mungkin berlaku dengan malloc ()
  • Gunakan calloc () untuk meminta halaman yang diketahui sudah sifar.

Sintaks malloc ()

Berikut adalah sintaks malloc ()

ptr = (cast_type *) malloc (byte_size);

Dalam sintaks di atas, ptr adalah penunjuk jenis cor_type. Fungsi malloc mengembalikan penunjuk ke memori byte_size yang diperuntukkan.

Example: ptr = (int *) malloc (50)

Apabila pernyataan ini berjaya dilaksanakan, ruang memori 50 bait dikhaskan. Alamat bait pertama ruang simpanan ditugaskan ke penunjuk "ptr" jenis int.

Sintaks calloc ()

Berikut adalah sintaks malloc ()

ptr = (cast_type *) calloc (n, size);

Sintaks di atas digunakan untuk memperuntukkan n blok memori dengan ukuran yang sama. Setelah ruang memori diperuntukkan, semua bait dimulakan menjadi sifar. Penunjuk, yang kini berada pada bait pertama ruang memori yang diperuntukkan, dikembalikan.

Contoh malloc () di C

Dalam kod berikut, sizeof (* ptr) digunakan untuk memperuntukkan blok memori 15 bilangan bulat. Dalam pernyataan printf, kami menemui nilai integer ke-6.

#include#includeint main(){int *ptr;ptr = malloc(15 * sizeof(*ptr));if (ptr != NULL) {*(ptr + 5) = 480;printf("Value of the 6th integer is %d",*(ptr + 5));}}

Pengeluaran:

Nilai bilangan bulat ke-6 ialah 480

Contoh calloc () di C

Program bahasa C di bawah mengira jumlah sepuluh istilah pertama. Sekiranya nilai penunjuk jika nol, maka ruang memori tidak akan diperuntukkan.

Untuk gelung digunakan untuk mengulang nilai pemboleh ubah "i" dan mencetak jumlahnya. Terakhir, fungsi bebas digunakan untuk membebaskan penunjuk.

#include #include int main() {int i, * ptr, sum = 0;ptr = calloc(10, sizeof(int));if (ptr == NULL) {printf("Error! memory not allocated.");exit(0);}printf("Building and calculating the sequence sum of the first 10 terms \n");for (i = 0; i < 10; ++i) { * (ptr + i) = i;sum += * (ptr + i);}printf("Sum = %d", sum);free(ptr);return 0;}

Pengeluaran:

Membina dan mengira jumlah turutan dari 10 sebutan pertama n Jumlah = 45

Perbezaan Antara calloc () dan malloc ()

Herer adalah perbezaan penting antara malloc () dan calloc ():

malloc () calloc ()
Fungsi Malloc () akan membuat satu blok memori bersaiz yang ditentukan oleh pengguna. Fungsi Calloc () dapat menetapkan beberapa blok memori untuk pemboleh ubah.
Fungsi Malloc mengandungi nilai sampah. Blok memori yang diperuntukkan oleh fungsi calloc selalu dimulakan menjadi sifar.
Bilangan hujah adalah 2. Bilangan hujah adalah 1.
Calloc lebih perlahan daripada malloc. Malloc lebih pantas daripada calloc.
Ia tidak selamat dibandingkan dengan calloc. Ia selamat digunakan berbanding malloc.
Kecekapan masa lebih tinggi daripada calloc (). Kecekapan masa lebih rendah daripada malloc ().
Fungsi Malloc () mengembalikan hanya alamat permulaan dan tidak menjadikannya sifar. Sebelum memperuntukkan alamat, fungsi Calloc () mengembalikan alamat permulaan dan menjadikannya sifar.
Ia tidak melakukan inisialisasi memori. Ia melakukan inisialisasi memori.

PERBEZAAN UTAMA:

  • Fungsi malloc () mengembalikan hanya alamat permulaan dan tidak menjadikannya sifar sebaliknya, fungsi calloc () mengembalikan alamat permulaan dan menjadikannya sifar.
  • Dalam fungsi malloc, jumlah argumen adalah 2 sementara dalam fungsi calloc, jumlah argumen adalah 1.
  • kecekapan masa malloc () lebih tinggi daripada calloc () sedangkan malloc () tidak selamat berbanding calloc ()
  • malloc tidak memulakan memori sedangkan calloc melakukan inisialisasi memori.