Direkomendasikan, 2024

Pilihan Editor

Perbedaan Antara baru dan malloc ()

Baru dan malloc () keduanya digunakan untuk mengalokasikan memori secara dinamis. Padahal, baru dan malloc () berbeda dalam banyak konteks. Perbedaan utama antara baru dan malloc () adalah bahwa baru adalah operator, digunakan sebagai konstruk. Di sisi lain, malloc () adalah fungsi perpustakaan standar, yang digunakan untuk mengalokasikan memori saat runtime. Perbedaan lain di antara mereka dibahas di bawah dalam tabel perbandingan:

Grafik perbandingan

Dasar untuk Perbandinganbarumalloc ()
BahasaOperator baru adalah fitur khusus C ++, Java, dan C #.Fungsi malloc () adalah fitur C.
Alam"baru" adalah operator.malloc () adalah suatu fungsi.
ukuran dari( )baru tidak perlu ukuran operator karena cukup banyak memori untuk jenis tertentumalloc membutuhkan ukuran operator untuk mengetahui ukuran memori apa yang harus dibagikan.
KonstruktorOperator baru dapat memanggil konstruktor suatu objek.malloc () sama sekali tidak dapat membuat panggilan ke konstruktor.
InisialisasiOperator baru dapat menginisialisasi objek sambil mengalokasikan memori untuknya.Inisialisasi memori tidak dapat dilakukan di malloc.
Kelebihan bebanOperator baru dapat kelebihan beban.The malloc () tidak pernah bisa kelebihan beban.
KegagalanPada kegagalan, operator baru melempar pengecualian.Pada kegagalan, malloc () mengembalikan NULL.
DeallokasiAlokasi memori oleh yang baru, dialokasikan menggunakan "delete".Alokasi memori oleh malloc () dinonaktifkan menggunakan fungsi bebas ().
RealokasiOperator baru tidak mengalokasikan kembali memori.Memori yang dialokasikan oleh malloc () dapat dialokasikan kembali menggunakan realloc ().
EksekusiOperator baru memotong waktu eksekusi.Malloc () membutuhkan lebih banyak waktu untuk eksekusi.

Definisi baru

Operator baru adalah operator alokasi memori yang mengalokasikan memori secara dinamis. Operator baru mengalokasikan memori dalam tumpukan dan mengembalikan alamat awal memori yang ditugaskan ke variabel referensi. Operator baru mirip dengan malloc () di C. Namun, kompiler C ++ kompatibel dengan malloc () tetapi, yang terbaik adalah menggunakan operator baru karena memiliki keunggulan tertentu dibandingkan malloc (). Sintaks operator baru adalah sebagai berikut:

 type variable_name = tipe baru (parameter_list); 

Di sini, "ketik" menunjukkan tipe data dari variabel yang memori harus dialokasikan. Kata "variable_name" adalah nama yang diberikan ke variabel referensi yang menyimpan pointer ke memori. Tanda kurung di sini menentukan panggilan konstruktor. Parameter_list adalah daftar nilai yang diteruskan ke konstruktor untuk menginisialisasi objek yang baru dibangun.

Operator baru mengalokasikan cukup memori yang diperlukan untuk objek dari jenis tertentu. Oleh karena itu, tidak memerlukan operator sizeof () juga tidak perlu mengubah ukuran memori seperti malloc () yang menggunakan realloc () untuk mengalokasikan kembali memori. Operator baru adalah konstruk; itu memanggil konstruktor suatu objek sedangkan deklarasi yang umumnya digunakan untuk menginisialisasi objek.

Kita tahu bahwa operator baru mengalokasikan memori di heap dan ukuran heap terbatas. Jadi, jika tumpukan kehabisan memori dan operator baru mencoba mengalokasikan memori, itu akan menyebabkan kegagalan operator baru. Jika operator baru gagal mengalokasikan memori, itu akan mengeluarkan pengecualian, dan jika kode Anda tidak dapat menangani pengecualian itu, program berakhir secara tidak normal.

Memori yang dialokasikan oleh operator baru dapat dibebaskan menggunakan operator hapus. Operator baru memotong waktu eksekusi karena operator, bukan fungsi.

Definisi malloc ()

The malloc () adalah fungsi yang digunakan untuk mengalokasikan jumlah memori yang diminta pada heap. Metode mengembalikan pointer dari tipe 'void' yang lebih jauh, ketik cast untuk mendapatkan pointer ke memori dari tipe tertentu dan pointer ini ke memori ditugaskan ke variabel referensi. Fungsi malloc () mirip dengan operator baru di C ++ karena digunakan untuk mengalokasikan memori secara dinamis. The malloc () adalah fungsi perpustakaan standar. Sintaks dari fungsi malloc () adalah sebagai berikut:

 type variable_name = (type *) malloc (sizeof (type)); 

Di sini, "ketik" menunjukkan tipe data dari variabel yang memori harus dialokasikan. Variabel_name adalah nama variabel referensi yang penunjuknya dikembalikan oleh malloc () akan ditetapkan. The (type *) menjelaskan tipe casting untuk mendapatkan pointer ke memori dalam tipe tertentu. Sizeof () menjelaskan malloc (), bahwa ukuran memori apa yang diperlukan.

Malloc () membutuhkan tipe casting karena pointer yang dikembalikan oleh malloc () adalah tipe void, jadi, untuk menetapkan tipe ke pointer, tipe casting diperlukan. Sizeof () diperlukan karena fungsi malloc () mengalokasikan memori mentah, oleh karena itu, perlu memberitahu fungsi malloc () bahwa ukuran memori apa yang harus dialokasikan. Jika memori yang dialokasikan tidak cukup, dapat diubah ukurannya atau realokasi menggunakan realloc ().

Fungsi malloc () mengalokasikan memori pada heap. Dalam kasus ini, tumpukan kehabisan memori kemudian, fungsi malloc () mengembalikan pointer NULL. Oleh karena itu, variabel referensi yang berisi pointer dikembalikan oleh malloc (), harus diperiksa sebelum digunakan, jika tidak dapat mengakibatkan sistem crash.

Memori yang dialokasikan oleh fungsi malloc () dideallocated menggunakan free (). Karena panggilan fungsi mengarah ke overhead, malloc () membutuhkan lebih banyak waktu untuk eksekusi.

Perbedaan Utama Antara baru dan malloc ()

  1. Operator baru adalah konstruk yang diperkenalkan dalam C ++ dan digunakan di Java, C #, dll. Di sisi lain malloc () adalah fungsi perpustakaan standar yang hanya ditemukan dalam bahasa C dan didukung oleh C ++.
  2. Operator baru mengalokasikan memori yang cukup untuk objek dari jenis yang ditentukan sehingga, tidak memerlukan operator ukuran. Di sisi lain, fungsi malloc () membutuhkan operator sizeof () agar fungsi tahu bahwa ukuran memori apa yang harus dialokasikan.
  3. Operator baru dapat memanggil konstruktor objek saat deklarasi. Di sisi lain, fungsi malloc () tidak dapat memanggil konstruktor.
  4. Operator 'baru' bisa kelebihan beban tetapi malloc () tidak bisa.
  5. Jika operator baru gagal mengalokasikan memori, itu mengeluarkan pengecualian yang harus ditangani oleh kode lain program akan berakhir. Di sisi lain, fungsi malloc () mengembalikan pointer NULL jika gagal mengalokasikan memori. Jika pointer digunakan tanpa memeriksa ini, itu akan mengakibatkan sistem crash.
  6. Memori yang dialokasikan menggunakan operator baru dapat dinonaktifkan menggunakan 'hapus'. Di sisi lain, memori yang dialokasikan menggunakan fungsi malloc () dapat dideallocated menggunakan free ().
  7. Setelah memori dialokasikan menggunakan operator baru, memori tidak dapat diubah ukurannya. Di sisi lain, memori yang dialokasikan menggunakan fungsi malloc () dapat dialokasikan kembali (diubah ukurannya) menggunakan fungsi realloc ().
  8. Waktu eksekusi baru kurang dibandingkan dengan malloc () karena malloc adalah fungsi dan baru adalah konstruk.

Kesimpulan:

Fungsi malloc () adalah cara lama untuk mengalokasikan memori secara dinamis. Saat ini, operator baru digunakan untuk mengalokasikan memori pada saat runtime karena memiliki kelebihan tertentu dibandingkan malloc ().

Top