Disyorkan, 2024

Pilihan Editor

Perbezaan Antara baru dan malloc ()

Yang baru dan malloc () kedua-duanya digunakan untuk mengagihkan memori secara dinamik. Walaupun, baru dan malloc () berbeza dalam banyak konteks. Perbezaan utama antara baru dan malloc () adalah yang baru adalah pengendali, yang digunakan sebagai pembinaan. Sebaliknya, malloc () adalah fungsi perpustakaan standard, digunakan untuk memperuntukkan memori semasa runtime. Perbezaan lain di antara mereka dibincangkan di bawah dalam carta perbandingan:

Carta perbandingan

Asas untuk Perbandinganbarumalloc ()
BahasaOperator baru adalah ciri khusus C ++, Java, dan C #.Fungsi malloc () adalah ciri C.
Alam"baru" adalah pengendali.malloc () adalah fungsi.
saiz( )baru tidak memerlukan saiz operator yang memfokuskan memori yang cukup untuk jenis tertentumalloc memerlukan pengendali saiz untuk mengetahui saiz memori yang ada untuk digunakan.
PembinaPengendali baru boleh memanggil pembina sesuatu objek.malloc () tidak boleh membuat panggilan kepada pembina.
InisialisasiPengendali baru boleh memulakan objek semasa mengagihkan ingatan kepadanya.Inisial memori tidak boleh dilakukan di malloc.
OverloadingPengendali baru boleh dibebankan.The malloc () tidak boleh dilebihkan.
KegagalanApabila kegagalan, operator baru melemparkan pengecualian.Atas kegagalan, malloc () mengembalikan NULL.
DeallocationPeruntukan memori oleh baru, deallocated menggunakan "padam".Peruntukan memori oleh malloc () diallocated menggunakan fungsi percuma ().
Pemindahan semulaOperator baru tidak mengembalikan semula memori.Memori yang diperuntukkan oleh malloc () boleh diagihkan semula menggunakan realloc ().
PelaksanaanOperator baru memotong masa pelaksanaan.The malloc () memerlukan lebih banyak masa untuk pelaksanaan.

Definisi baru

Operator baru adalah pengendali peruntukan memori yang memperuntukkan memori secara dinamik. Operator baru memperuntukkan memori dalam timbunan dan mengembalikan alamat permulaan memori yang diberikan kepada pembolehubah rujukan. Pengendali baru serupa dengan malloc () di C. Walau bagaimanapun, pengkompil C ++ adalah serasi dengan malloc () tetapi, adalah lebih baik menggunakan operator baru kerana ia mempunyai kelebihan tertentu berbanding malloc (). Sintaks pengendali baru adalah seperti berikut:

 ketik variable_name = jenis baru (parameter_list); 

Di sini, "jenis" menandakan jenis data pembolehubah yang mana memori mesti diperuntukkan. Perkataan "variable_name" adalah nama yang diberikan kepada pembolehubah rujukan yang memegang penunjuk ke ingatan. Sangkalan di sini menentukan panggilan pembina. Parameter_list adalah senarai nilai-nilai yang dihantar kepada pembina untuk memulakan objek yang baru dibina.

Operator baru memperuntukkan memori yang cukup untuk objek jenis tertentu. Oleh itu, ia tidak memerlukan pengendali sizeof () dan tidak memerlukan saiz semula ingatan seperti malloc () yang menggunakan realloc () untuk mengembalikan semula memori. Pengendali baru adalah pembinaan; ia memanggil pembina sesuatu objek sementara deklarasi yang biasanya digunakan untuk memulakan objek tersebut.

Kami tahu bahawa pengendali baru memperuntukkan memori dalam timbunan dan saiz timbunannya terhad. Oleh itu, jika timbunan itu tidak di dalam memori dan pengendali baru cuba memperuntukkan memori, ia akan menyebabkan kegagalan operator baru. Sekiranya pengendali baru gagal memperuntukkan memori, ia akan membuang pengecualian, dan jika kod anda tidak dapat mengendalikan pengecualian itu, program itu akan berakhir dengan tidak normal.

Memori yang diperuntukkan oleh operator baru boleh dibebaskan menggunakan operator hapus. Operator baru memotong masa pelaksanaan kerana ia adalah pengendali, bukan fungsi.

Definisi malloc ()

Malloc () adalah fungsi yang digunakan untuk memperuntukkan jumlah ingatan yang diminta pada timbunan. Kaedah mengembalikan penunjuk 'kekosongan' jenis yang lebih lanjut, jenis cast untuk mendapatkan penunjuk ke memori jenis tertentu dan penunjuk ini ke memori ditugaskan kepada pembolehubah rujukan. Fungsi malloc () mirip dengan pengendali baru dalam C ++ kerana ia digunakan untuk memperuntukkan memori secara dinamik. The malloc () adalah fungsi perpustakaan biasa. Sintaks fungsi malloc () adalah seperti berikut:

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

Di sini, "jenis" menandakan jenis data pembolehubah yang mana memori mesti diperuntukkan. The variable_name adalah nama pembolehubah rujukan yang mana penunjuk yang dikembalikan oleh malloc () akan diberikan. (Jenis *) menerangkan jenis pemutus untuk mendapatkan penuding ke memori dalam jenis tertentu. The sizeof () menerangkan malloc (), yang saiz memori apa yang diperlukan.

The malloc () memerlukan pemutus jenis kerana penunjuk yang dikembalikan oleh malloc () adalah jenis tidak sah, jadi, untuk memberikan jenis kepada penunjuk, jenis pemutus diperlukan. The sizeof () diperlukan kerana fungsi malloc () menguntukkan memori mentah sehingga, ia perlu memberitahu fungsi malloc () yang saiz memori yang harus diperuntukkan. Sekiranya memori yang diperuntukkan tidak mencukupi, ia boleh diubah saiznya atau menggunakan semula realloc ().

Fungsi malloc () mengagihkan memori pada timbunan. Dalam kes, timbunan itu tidak di dalam memori maka, fungsi malloc () mengembalikan penunjuk NULL. Oleh itu, pembolehubah rujukan yang mengandungi penunjuk yang dikembalikan oleh malloc (), hendaklah diperiksa sebelum ia digunakan, jika tidak, ia boleh menyebabkan kemalangan sistem.

Memori yang diperuntukkan oleh fungsi malloc () diallocated menggunakan percuma (). Sebagai panggilan fungsi membawa kepada overhead, malloc () memerlukan lebih banyak masa untuk pelaksanaan.

Perbezaan Utama Antara baru dan malloc ()

  1. Pengendali baru adalah satu konstruk yang diperkenalkan dalam C ++ dan digunakan dalam Java, C #, dan lain-lain. Sebaliknya malloc () adalah fungsi perpustakaan standard yang hanya terdapat dalam bahasa C dan disokong oleh C ++.
  2. Operator baru memperuntukkan memori yang mencukupi untuk objek jenis yang dinyatakan jadi, ia tidak memerlukan pengendali saiz. Sebaliknya, fungsi malloc () memerlukan pengendali sizeof () untuk membiarkan fungsi mengetahui saiz memori yang diperlukan untuk diperuntukkan.
  3. Pengendali baru boleh memanggil pembina objek semasa pengisytiharan. Sebaliknya, fungsi malloc () tidak dapat memanggil pembina.
  4. Pengendali 'baru' boleh dibebankan tetapi malloc () tidak dapat.
  5. Jika pengendali baru gagal memperuntukkan memori, ia melemparkan pengecualian yang mesti dikendalikan oleh kod lain program akan ditamatkan. Sebaliknya, fungsi malloc () mengembalikan penunjuk NULL jika gagal memperuntukkan memori. Jika penunjuk digunakan tanpa memeriksa ini, ia akan mengakibatkan kemalangan sistem.
  6. Memori yang diperuntukkan menggunakan pengendali baru boleh diallokasi menggunakan 'padam'. Sebaliknya, memori yang diperuntukkan menggunakan fungsi malloc () boleh diallocated menggunakan percuma ().
  7. Sebaik sahaja memori diagihkan menggunakan operator baru, ia tidak boleh diubah saiznya pula. Sebaliknya, memori yang diperuntukkan menggunakan fungsi malloc () boleh diagihkan semula (disaiz semula) menggunakan fungsi realloc ().
  8. Masa pelaksanaan baru kurang berbanding dengan malloc () kerana malloc adalah fungsi dan baru adalah membina.

Kesimpulan:

Fungsi malloc () adalah cara lama untuk memperagakan memori secara dinamik. Pada masa kini, pengendali baru digunakan untuk memperuntukkan memori semasa runtime kerana ia mempunyai kelebihan tertentu berbanding malloc ().

Top