Perbedaan Antara malloc() dan calloc()

Perbedaan Utama antara malloc() vs calloc()

  • fungsi malloc() hanya mengembalikan alamat awal dan tidak menjadikannya nol, sebaliknya, fungsi calloc() mengembalikan alamat awal dan menjadikannya nol.
  • Pada fungsi malloc jumlah argumennya adalah 1, sedangkan pada fungsi calloc jumlah argumennya adalah 2.
  • malloc() efisiensi waktu lebih tinggi dari calloc(), sedangkan malloc() tidak aman dibandingkan dengan calloc()
  • malloc tidak menginisialisasi memori, sedangkan calloc melakukan inisialisasi memori.
malloc() vs calloc()
malloc() vs calloc()

Apa itu Alokasi Memori Dinamis?

Alokasi memori dinamis adalah proses mengalokasikan memori pada saat run time. Ada empat rutinitas perpustakaan, calloc(), free(), alokasi ulang(), dan malloc() yang dapat digunakan untuk mengalokasikan memori dan mengosongkannya selama eksekusi program. Rutinitas ini didefinisikan dalam file header bernama stdlib.h.

Apa itu malloc() ?

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

Pointer yang dikembalikan biasanya bertipe void. Artinya kita dapat menetapkan fungsi malloc ke pointer mana pun. Bentuk lengkap malloc adalah alokasi memori.

Apa itu calloc() ?

fungsi Calloc() digunakan untuk mengalokasikan beberapa blok memori. Ini adalah fungsi alokasi memori dinamis yang digunakan untuk mengalokasikan memori ke struktur data kompleks seperti array dan struktur. Jika fungsi ini gagal mengalokasikan cukup ruang seperti yang ditentukan, fungsi ini akan mengembalikan pointer null. Bentuk lengkap fungsi calloc adalah alokasi bersebelahan.

Perbedaan antara malloc() dan calloc()

Berikut perbedaan penting antara malloc() vs calloc():

malloc () panggilan()
Fungsi Malloc() akan membuat satu blok memori dengan ukuran yang ditentukan oleh pengguna. Fungsi Calloc() dapat menetapkan beberapa blok memori untuk suatu variabel.
Fungsi Malloc mengandung nilai sampah. Blok memori yang dialokasikan oleh fungsi calloc selalu diinisialisasi ke nol.
Jumlah argumen adalah 1. Jumlah argumen adalah 2.
Calloc lebih lambat dari malloc. Malloc lebih cepat dari calloc.
Itu tidak aman dibandingkan dengan calloc. Aman untuk digunakan dibandingkan dengan malloc.
Efisiensi waktu lebih tinggi daripada calloc(). Efisiensi waktu lebih rendah dari malloc().
Fungsi Malloc() hanya mengembalikan alamat awal dan tidak menjadikannya nol. Sebelum mengalokasikan alamat, fungsi Calloc() mengembalikan alamat awal dan menjadikannya nol.
Itu tidak melakukan inisialisasi memori. Ia melakukan inisialisasi memori.

Sintaks malloc()

Berikut adalah Sintaks malloc()

ptr = (cast_type *) malloc (byte_size);

Dalam sintaks di atas, ptr adalah penunjuk cast_type. Fungsi malloc mengembalikan pointer ke memori yang dialokasikan byte_size.

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

Ketika pernyataan ini berhasil dijalankan, ruang memori sebesar 50 byte dicadangkan. Alamat byte pertama dari ruang yang dicadangkan diberikan ke penunjuk “ptr” bertipe int.

Sintaks calloc()

Berikut adalah Sintaks malloc()

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

Sintaks di atas digunakan untuk mengalokasikan n blok memori dengan ukuran yang sama. Setelah ruang memori dialokasikan, semua byte diinisialisasi ke nol. Pointer, yang saat ini berada pada byte pertama dari ruang memori yang dialokasikan, dikembalikan.

Contoh malloc() di C

Dalam kode di bawah ini, sizeof(*ptr) digunakan untuk mengalokasikan blok memori 15 bilangan bulat. Dalam pernyataan printf, kita mencari nilai bilangan bulat ke-6.

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

Keluaran:

Nilai bilangan bulat ke-6 adalah 480

Contoh calloc() di C

Program bahasa C di bawah ini menghitung jumlah sepuluh suku pertama. Jika nilai penunjuknya nol, maka ruang memori tidak akan dialokasikan.

For loop digunakan untuk mengulangi nilai variabel “i” dan mencetak jumlahnya. Terakhir, fungsi free digunakan untuk membebaskan pointer.

#include <stdio.h>
#include <stdlib.h>
    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;
    }

Keluaran:

Membangun dan menghitung jumlah barisan 10 suku pertama n Jumlah = 45

Mengapa menggunakan malloc() ?

Berikut adalah alasan menggunakan malloc()

  • Anda harus menggunakan malloc() ketika Anda harus mengalokasikan memori saat runtime.
  • Anda harus menggunakan malloc ketika Anda harus mengalokasikan objek yang harus ada di luar eksekusi blok memori saat ini.
  • Gunakan malloc() jika Anda perlu mengalokasikan memori lebih besar dari ukuran tumpukan itu.
  • Ini mengembalikan penunjuk ke byte pertama dari ruang yang dialokasikan.
  • Hal ini memungkinkan pengembang untuk mengalokasikan memori sesuai kebutuhan dalam jumlah yang tepat.
  • Fungsi ini mengalokasikan blok memori berukuran byte dari heap.

Mengapa menggunakan calloc() ?

Berikut adalah alasan menggunakan calloc()

  • Ketika Anda harus mengatur memori yang dialokasikan ke nol.
  • Anda dapat menggunakan calloc yang mengembalikan pointer untuk mendapatkan akses ke tumpukan memori.
  • Digunakan ketika Anda perlu menginisialisasi elemen ke nol untuk mengembalikan pointer ke memori.
  • Untuk mencegah overflow yang mungkin terjadi dengan malloc()
  • Gunakan calloc() untuk meminta halaman yang diketahui sudah di-zero-kan.

Buletin Harian Guru99

Awali hari Anda dengan berita AI terbaru dan terpenting yang disampaikan saat ini.