Direkomendasikan, 2024

Pilihan Editor

Perbedaan Antara malloc dan calloc

Perbedaan mendasar antara fungsi malloc dan calloc adalah bahwa calloc () membutuhkan dua argumen, bukan satu argumen yang diperlukan oleh malloc () . Baik malloc () dan calloc () adalah fungsi-fungsi yang disediakan oleh bahasa pemrograman C untuk alokasi memori dinamis dan de-alokasi pada saat dijalankan.

Sebelum memahami fungsi malloc () dan calloc () terlebih dahulu mari kita memahami arti alokasi memori dinamis. Alokasi memori adalah prosedur menetapkan memori komputer untuk pelaksanaan program dan proses. Kami menggunakan teknik alokasi dinamis ketika tidak diketahui sebelumnya berapa banyak ruang memori yang dibutuhkan untuk program dan proses.

Alokasi memori dinamis muncul karena masalah yang terkait dengan alokasi memori statis seperti jika lebih sedikit elemen yang disimpan, maka sisa memori tidak perlu terbuang sia-sia. Oleh karena itu, ia mengatasi masalah alokasi memori statis di mana memori hanya dialokasikan ketika diperlukan.

Grafik perbandingan

Dasar perbandinganmalloc ()calloc ()
Tidak ada blokMenetapkan satu blok memori yang diminta.
Menetapkan banyak blok dari memori yang diminta.
Sintaksisvoid * malloc (size_t size);void * calloc (size_t num, size_t size);
Inisialisasimalloc () tidak menghapus dan menginisialisasi memori yang dialokasikan.Memori yang dialokasikan diinisialisasi ke nol dengan menggunakan calloc ().
Cara Alokasifungsi malloc () mengalokasikan memori dengan ukuran 'ukuran' dari heap.fungsi calloc () mengalokasikan memori yang ukurannya sama dengan ukuran num *.
KecepatanCepatRelatif lambat.

Definisi malloc ()

Fungsi malloc memberikan blok memori dalam byte . Pengguna harus secara eksplisit memberikan ukuran blok, yang diperlukan untuk penggunaan.

Melalui program fungsi malloc, permintaan RAM sistem untuk alokasi memori, jika permintaan tersebut dikalahkan (yaitu, fungsi malloc mengatakan berhasil mengalokasikan memori), ia mengembalikan sebuah penunjuk ke blok memori pertama. Ini mengembalikan batal jenis pointer, itu berarti semua jenis pointer dapat ditugaskan.

Meskipun, ia mengembalikan NULL, jika fungsi malloc tidak dapat mengalokasikan jumlah memori yang diperlukan. Fungsi malloc dapat diakses di TURBO C, alloc.h file alloc.h atau stdlib.h, dan pada UNIX akan tersedia dalam file header .

SINTAKSIS

Sintaks fungsi ini adalah sebagai berikut:

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

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

Di mana ukuran mewakili ukuran memori yang diperlukan dalam byte (yaitu, jumlah lokasi memori yang berdekatan untuk dialokasikan).

Tetapi seperti yang disebutkan sebelumnya bahwa fungsi malloc mengembalikan pointer kosong, akibatnya operator cor diperlukan untuk mengubah tipe pointer kembali berdasarkan kebutuhan kita, deklarasi di atas dapat disajikan dalam bentuk berikut:

ptr_var=(type_cast* ) malloc (size)

Di mana ptr_var adalah nama dari pointer yang mempertahankan alamat awal dari blok memori yang dialokasikan, type_cast adalah tipe data yang akan diubah oleh pointer (atau tipe void), dan ukuran menggambarkan ukuran blok memori yang dialokasikan dalam byte. .

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

Memori yang dialokasikan oleh fungsi malloc berisi nilai sampah .

Perhatikan bahwa untuk memverifikasi bahwa jika permintaan yang sesuai dihasilkan oleh malloc untuk mengalokasikan memori yang diberikan oleh RAM sistem, atau ditolak (dalam kasus jika ruang yang dibutuhkan tidak tersedia). Kita dapat menggunakan properti di mana jumlah memori yang dibutuhkan tidak ditetapkan, fungsi malloc mengembalikan NULL.

Definisi kaloc ()

Fungsi calloc beroperasi persis sama dengan fungsi malloc mengecualikan fakta bahwa ia membutuhkan dua argumen seperti dalam kasus malloc () hanya satu argumen yang diperlukan.

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

Di sini 2 menentukan ukuran tipe data dalam byte yang kami ingin alokasi dibuat, yang merupakan kasus ini adalah 2 untuk bilangan bulat. Dan 10 menandakan jumlah elemen yang harus dialokasikan alokasi.

Ingatlah bahwa argumen yang diteruskan ke fungsi malloc adalah (n * 10), itu adalah argumen tunggal jangan bingung karena banyak argumen selalu dipisahkan oleh koma. Argumen (n * 10) tidak memiliki koma di antara keduanya. Karenanya itu adalah argumen tunggal, meskipun bukan argumen yang sederhana tetapi sebuah ekspresi.

Kembali ke deklarasi di atas, setelah eksekusi pernyataan di atas, blok memori 20 byte dialokasikan untuk program yang meminta dan alamat blok pertama ditugaskan untuk program yang meminta, dan alamat blok pertama ditugaskan ke pointer. ptr.

Memori yang dialokasikan oleh fungsi calloc menampung semua nol. Fungsi calloc juga tersedia dalam file header atau dalam TURBO C.

Perbedaan utama antara malloc dan calloc

Perbedaan utama antara fungsi malloc dan calloc adalah:

  1. Satu blok memori yang diminta ditugaskan di malloc sementara beberapa blok memori yang diminta dialokasikan oleh calloc.
  2. Fungsi malloc tidak menghapus dan menginisialisasi memori yang dialokasikan. Ini berisi nilai sampah dan item dari memori yang dialokasikan tidak dapat diubah. Sebaliknya, calloc menginisialisasi memori yang dialokasikan ke nol.
  3. malloc lebih cepat daripada calloc karena persyaratan langkah-langkah tambahan inisialisasi di calloc tetapi perbedaannya diabaikan.
  4. Perbedaan lain antara keduanya adalah bahwa calloc adalah malloc + memset, memset mengalokasikan halaman fisik dalam memori sedangkan malloc hanya menetapkan memori dari tumpukan di alamat virtual.

Kesimpulan:

Baik fungsi malloc dan calloc digunakan untuk alokasi memori dan memiliki kelebihan tertentu, dan kelemahan seperti malloc lebih cepat dibandingkan dengan calloc. Selain itu, malloc lebih mudah digunakan karena hanya membutuhkan satu argumen karena calloc mengalokasikan memori dan menginisialisasi area memori dengan NOL. Tetapi Anda lebih suka menggunakan calloc ketika inisialisasi variabel lebih penting bagi Anda.

Top