Disyorkan, 2024

Pilihan Editor

Perbezaan Antara malloc dan calloc

Perbezaan asas antara fungsi malloc dan calloc adalah calloc () memerlukan dua argumen dan bukan satu hujah yang diperlukan oleh malloc () . Kedua-dua malloc () dan calloc () adalah fungsi yang disediakan oleh bahasa pengaturcaraan untuk peruntukan memori yang dinamik dan de-peruntukan pada masa yang berjalan.

Sebelum memahami fungsi malloc () dan calloc () terlebih dahulu marilah kita fahami makna peruntukan memori dinamik. Peruntukan memori adalah prosedur untuk memberikan memori komputer untuk pelaksanaan program dan proses. Kami menggunakan teknik peruntukan dinamik apabila ia tidak diketahui sebelum berapa ruang ingatan diperlukan untuk program dan proses.

Peruntukan memori dinamik timbul kerana masalah yang berkaitan dengan peruntukan memori statik seperti jika elemen yang lebih sedikit disimpan, maka sisa memori tidak perlu dibazirkan. Oleh itu, ia mengatasi masalah peruntukan memori statik di mana memori diperuntukkan hanya apabila diperlukan.

Carta Perbandingan

Asas perbandinganmalloc ()calloc ()
Tiada blokBerikan satu blok ingatan yang diminta.
Berikan beberapa blok memori yang diminta.
Sintaksvoid * malloc (size_t size);void * calloc (size_t num, saiz size_t);
Inisialisasimalloc () tidak jelas dan memulakan memori yang diperuntukkan.Memori yang diperuntukkan diasaskan kepada sifar dengan menggunakan calloc ().
Cara PeruntukanFungsi malloc () mengagihkan memori saiz 'saiz' dari timbunan.fungsi calloc () mengagihkan memori yang saiznya sama dengan saiz * num.
KelajuanCepatAgak perlahan.

Definisi malloc ()

Fungsi malloc memberikan blok memori dalam bait . Pengguna harus memberi jelas saiz blok, ia memerlukan penggunaan.

Melalui program fungsi malloc meminta RAM sistem untuk peruntukan ingatan, jika permintaan itu diakui (iaitu, fungsi malloc mengatakan berjaya dalam mengalokasikan memori), ia mengembalikan penunjuk ke blok pertama memori. Ia mengembalikan jenis penunjuk yang tidak sah, yang bermaksud mana-mana jenis penuding dapat diberikan.

Walaupun, ia mengembalikan NULL, jika fungsi malloc tidak dapat memperuntukkan jumlah ingatan yang diperlukan. Fungsi malloc boleh diakses dalam TURBO C, fail header alloc.h atau stdlib.h, dan pada UNIX ia akan tersedia dalam fail header .

SYNTAX

Sintaks fungsi ini adalah seperti berikut:

malloc(number of elements * size of each element);

sebagai contoh,
int *ptr;
ptr=malloc(10*sizeof (int))

Dimana saiz mewakili saiz ingatan yang diperlukan dalam bait (iaitu, bilangan lokasi memori berdampingan yang akan diperuntukkan).

Tetapi seperti yang dinyatakan sebelum fungsi malloc mengembalikan penunjuk yang tidak sah, maka pengendali pemula diperlukan untuk menukar jenis penunjuk yang dikembalikan berdasarkan keperluan kami, pernyataan di atas dapat disajikan dalam bentuk berikut:

ptr_var=(type_cast* ) malloc (size)

Di mana ptr_var adalah nama penunjuk yang menyimpan alamat permulaan blok memori yang diperuntukkan, type_cast adalah jenis data ke mana penunjuk yang dikembalikan (atau menaip kekosongan) akan diubah, dan saiz menerangkan saiz blok memori yang diperuntukkan dalam bait .

Sebagai contoh:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Memori yang diperuntukkan oleh fungsi malloc mengandungi nilai sampah .

Perhatikan bahawa untuk mengesahkan bahawa jika permintaan sepadan dijana oleh malloc untuk memperuntukkan memori yang diberikan oleh sistem RAM, atau ditolak (dalam kes jika ruang yang diperlukan tidak tersedia). Kita boleh menggunakan harta di mana jumlah memori yang diperlukan tidak diberikan fungsi malloc mengembalikan NULL.

Definisi calloc ()

Fungsi calloc beroperasi dengan tepat sama seperti fungsi malloc tidak termasuk hakikat bahawa ia memerlukan dua hujah seperti dalam hal malloc () hanya satu hujah yang diperlukan.

Sebagai contoh:
int*ptr;
ptr = (int*)calloc(10, 2);

Di sini 2 menentukan saiz jenis data dalam bait yang mana kita mahu peruntukan dibuat, yang mana kes ini adalah 2 untuk bilangan bulat. Dan 10 menandakan jumlah unsur yang mana peruntukan akan dibuat.

Ingatlah bahawa hujah yang diserahkan kepada fungsi malloc adalah (n * 10), hujah tunggal jangan dikelirukan kerana pelbagai hujah selalu dipisahkan oleh koma. Hujah (n * 10) tidak mempunyai koma di antara. Oleh itu, hujah tunggal, walaupun bukan satu perkara yang mudah tetapi ungkapan.

Kembali kepada pernyataan di atas, setelah pelaksanaan pernyataan di atas blok memori sebanyak 20 bait diperuntukkan kepada program yang meminta dan alamat blok pertama diberikan kepada program yang meminta, dan alamat blok pertama diberikan kepada penunjuk ptr.

Memori yang diperuntukkan oleh fungsi calloc memegang semua nol. Fungsi calloc juga boleh diperolehi dalam fail header atau dalam TURBO C.

Perbezaan Utama Antara malloc dan calloc

Perbezaan utama antara fungsi malloc dan calloc adalah:

  1. Satu blok memori yang diminta ditugaskan di malloc manakala beberapa blok memori yang diminta diperuntukkan oleh calloc.
  2. Fungsi malloc tidak jelas dan memulakan memori yang diperuntukkan. Ia mengandungi nilai sampah dan item memori yang diperuntukkan tidak dapat diubah. Sebaliknya, calloc memulakan memori yang diperuntukkan kepada sifar.
  3. malloc adalah lebih cepat daripada calloc kerana keperluan tambahan langkah permulaan dalam panggilan calloc tetapi perbezaannya dapat diabaikan.
  4. Satu lagi perbezaan antara keduanya adalah calloc ialah malloc + memset, memset memperuntukkan halaman fizikal dalam ingatan sedangkan malloc hanya memberikan memori dari tumpukan dalam alamat maya.

Kesimpulan:

Kedua-dua fungsi malloc dan calloc digunakan untuk peruntukan memori dan mempunyai kelebihan tertentu, dan kelemahan seperti malloc adalah cepat berbanding dengan calloc. Lebih-lebih lagi, malloc lebih mudah digunakan kerana hanya memerlukan satu hujah kerana calloc mengalokasikan memori dan menginisialisasi kawasan memori dengan ZERO. Tetapi anda lebih suka menggunakan calloc apabila pembolehubah ubahsuaian adalah lebih penting untuk anda.

Top