Bagaimana Bekerja Dengan Peruntukan Memori Dinamik C ++?

Artikel ini meneroka Peruntukan Memori Dinamik Dalam C ++ satu ciri penting yang membolehkan anda mempertimbangkan keperluan memori anda untuk sumber masa nyata.

Peruntukan Memori Dinamik Dalam C ++ adalah ciri yang sangat penting yang membolehkan anda mempertimbangkan keperluan anda untuk menangani keperluan sumber masa nyata. Dalam artikel ini kita akan meneroka Penerokaan secara terperinci. Petunjuk berikut akan dibahas dalam artikel ini,

Oleh itu, mari kita mulakan artikel ini mengenai Peruntukan Memori Dinamik di C ++





Perlu peruntukan memori Dinamik?

Katakanlah, kami ingin memasukkan ayat sebagai susunan watak tetapi kami tidak pasti mengenai bilangan aksara yang diperlukan dalam larik.

Sekarang, semasa menyatakan susunan karakter, jika kita menentukan ukurannya lebih kecil daripada ukuran rentetan yang diinginkan, maka kita akan mendapat ralat kerana ruang dalam memori yang dialokasikan untuk array lebih rendah dibandingkan dengan ukuran string input. Sekiranya kita menentukan ukurannya lebih besar dari ukuran string input, maka array akan dialokasikan ruang dalam memori yang jauh lebih besar daripada ukuran tali yang diinginkan, sehingga tidak perlu memakan lebih banyak memori bahkan ketika tidak diperlukan.



Dalam kes di atas, kami tidak mempunyai idea mengenai ukuran susunan yang tepat sehingga waktu kompilasi (ketika komputer menyusun kod dan rentetan dimasukkan oleh pengguna). Dalam kes sedemikian, kami menggunakan baru pengendali.

C ++ mentakrifkan dua pengendali yang tidak berfungsi baru dan padam yang menjalankan tugas memperuntukkan dan menyahpindah memori semasa menjalankan. Oleh kerana pengendali ini (baru dan hapus) beroperasi menggunakan memori stor percuma (Heap memory), mereka juga dipanggil operator kedai percuma. Penunjuk memberikan sokongan yang diperlukan untuk sistem peruntukan memori dinamik di C ++.

Dengan bantuan Peruntukan Dinamik, sebuah program dapat memperoleh memori semasa menjalankan.



Pemboleh ubah global dan tempatan dialokasikan ke memori semasa waktu kompilasi. Walau bagaimanapun, kami tidak dapat menambahkan pemboleh ubah global atau tempatan semasa waktu proses. Sekiranya program perlu menggunakan jumlah memori yang bervariasi, kita perlu mengalokasikan memori semasa menjalankan, seperti dan ketika diperlukan. Dan tentu saja, di sini rutin peruntukan dinamik dapat memenuhi tujuan tersebut.

Perbezaan antara peruntukan memori Statik dan peruntukan memori Dinamik:

Ini adalah seni bina memori asas yang digunakan untuk sebarang program C ++:

Memori - Peruntukan Memori Dinamik - Edureka

Kita akan memerlukan gambar seperti ini

Tumpukan digunakan untuk peruntukan memori statik dan Tumpukan untuk peruntukan memori dinamik, kedua-duanya disimpan dalam RAM komputer.

perbezaan antara overriding dan overloading

Pemboleh ubah yang diperuntukkan pada timbunan sementara peruntukan memori statik disimpan terus ke memori dan akses ke memori ini sangat cepat, juga peruntukannya ditangani ketika program disusun. Apabila fungsi atau kaedah memanggil fungsi lain yang pada gilirannya memanggil fungsi lain dan seterusnya, pelaksanaan semua fungsi ini tetap ditangguhkan sehingga fungsi terakhir mengembalikan nilainya. Tumpukan selalu disimpan dalam susunan LIFO (terakhir di pertama keluar), blok yang paling baru disimpan selalu blok seterusnya yang akan dibebaskan. Ini membantu menjejaki timbunan, membebaskan blok dari timbunan tidak lebih daripada menyesuaikan satu penunjuk.

Pemboleh ubah yang diperuntukkan di timbunan mempunyai ingatannya yang diperuntukkan pada masa berjalan sementara peruntukan memori dinamik. Mengakses memori ini sedikit lebih perlahan berbanding dengan timbunan, tetapi ukuran timbunannya hanya dibatasi oleh ukuran memori maya. Unsur timbunan tidak saling bergantung antara satu sama lain dan selalu dapat diakses secara rawak pada bila-bila masa. Kami boleh memperuntukkan blok pada bila-bila masa dan membebaskannya pada bila-bila masa. Ini menjadikannya sukar untuk melacak bahagian timbunan mana yang diperuntukkan atau dialihkan pada waktu tertentu.

Teruskan dengan artikel ini mengenai Peruntukan Memori Dinamik di C ++

Peruntukan Memori menggunakan baru Kata kunci

Dalam C ++ the baru operator digunakan untuk memperuntukkan memori pada waktu runtime dan memori tersebut diperuntukkan dalam bait. The baru operator menunjukkan permintaan untuk peruntukan memori dinamik di Heap. Sekiranya memori mencukupi tersedia maka baru pengendali memulakan memori dan mengembalikan alamat memori yang baru diperuntukkan dan dimulakan ke pemboleh ubah penunjuk.

Sintaks:

jenis data * pointer_name = jenis data baru

Contoh:

int * ptr = baru int // Kita boleh menyatakan pemboleh ubah sementara peruntukan dinamik dalam dua cara berikut. int * ptr = int baru (10) int * ptr = int baru {15} // operator baru juga digunakan untuk memperuntukkan blok (susunan) memori jenis data jenis. int * ptr = baru int [20] // Pernyataan di atas secara dinamik memperuntukkan memori untuk 20 bilangan bulat secara berterusan dari jenis int dan mengembalikan penunjuk ke elemen pertama urutan ke penunjuk 'ptr'.

Catatan : Jika timbunan tidak memiliki memori yang cukup untuk dialokasikan, permintaan baru menunjukkan kegagalan dengan membuang pengecualian std :: bad_alloc, kecuali 'nothrow' digunakan dengan operator baru, dalam hal ini mengembalikan penunjuk NULL. Oleh itu, adalah amalan yang baik untuk memeriksa pemboleh ubah penunjuk yang dihasilkan oleh yang baru sebelum menggunakannya dalam program.

Teruskan dengan artikel ini mengenai Peruntukan Memori Dinamik di C ++

Pembuangan memori menggunakan padam Kata kunci:

Setelah memori timbunan diperuntukkan ke objek pemboleh ubah atau kelas menggunakan baru kata kunci, kita boleh membuang ruang memori itu menggunakan padam kata kunci.

Sintaks:

delete pointer_variable // Di sini, pointer_variable adalah penunjuk yang menunjuk ke objek data yang dibuat oleh yang baru. delete [] pointer_variable // Untuk membebaskan memori array yang diperuntukkan secara dinamik yang ditunjukkan oleh pemboleh ubah pointer, kami menggunakan bentuk delete berikut:

Contoh:

hapus ptr hapus [] ptr

Catatan : Jangkauan objek atau jangka hayat objek adalah masa di mana objek itu tetap berada dalam ingatan semasa pelaksanaan program. Peruntukan Memori Heap lebih lambat daripada tumpukan, kerana, di timbunan, tidak ada urutan tertentu di mana anda dapat mengalokasikan memori sedangkan di tumpukan mengikuti LIFO.

Teruskan dengan artikel ini mengenai Peruntukan Memori Dinamik di C ++

Susun atur yang Dinamik

Penggunaan utama konsep peruntukan memori dinamik adalah untuk mengalokasikan memori ke array apabila kita harus menyatakannya dengan menentukan ukurannya tetapi tidak pasti mengenainya.

buat susunan objek

Mari kita lihat, contoh untuk memahami penggunaannya.

#sertakan dengan menggunakan namespace std int main () {int len, sum = 0 cout<< 'Enter the no. of students in the class' <>len int * markah = int baru [len] // Peruntukan memori dinamik<< 'Enter the marks of each student' << endl for( int i = 0 i>* (markah + i)} untuk (int i = 0 i

Penjelasan:
Dalam contoh ini terlebih dahulu kami meminta pengguna untuk bilangan pelajar dalam kelas dan kami menyimpan nilainya dalam pemboleh ubah len. Kemudian kami mengisytiharkan susunan bilangan bulat dan memperuntukkan ruang dalam memori secara dinamik sama dengan nilai yang tersimpan dalam pemboleh ubah len menggunakan pernyataan ini int * markah = int baru [panjang] sehingga diperuntukkan ruang sama dengan 'panjang * (ukuran 1 integer) '. Selebihnya kod itu jelas.

Teruskan dengan artikel ini mengenai Peruntukan Memori Dinamik di C ++

Peruntukan Memori Dinamik untuk Objek

Kita juga dapat memperuntukkan objek secara dinamik.

Seperti yang kita ketahui bahawa Konstruktor fungsi anggota kelas khas yang digunakan untuk menginisialisasi objek dan Destructor juga merupakan fungsi anggota kelas yang dipanggil setiap kali objek tersebut keluar dari ruang lingkup.

Destructor dapat digunakan untuk melepaskan memori yang diberikan ke objek. Ia dipanggil dalam keadaan berikut.

  • Apabila objek tempatan keluar dari ruang lingkup
  • Untuk objek global, apabila operator diterapkan pada penunjuk ke objek kelas

Kita sekali lagi dapat menggunakan penunjuk sambil mengalihkan memori ke objek secara dinamik.

Mari kita lihat contoh pelbagai objek.

#sertakan dengan menggunakan ruang nama kelas std Random {public: Random () {cout<< 'Constructor' << endl } ~Random() { cout << 'Destructor' << endl } } int main() { Random* a = new Random[3] delete [] a // Delete array return 0 } 

Pengeluaran:

Penjelasan:

Pembina akan dipanggil tiga kali kerana kami memperuntukkan memori kepada tiga objek kelas Rawak. Destructor juga akan dipanggil tiga kali pada setiap objek ini. 'Random * a = new Random [3]' pernyataan ini bertanggungjawab untuk peruntukan memori dinamik objek kami.

Oleh itu, kita telah mengakhiri artikel ini mengenai ‘Dynamic Memory Allocation C ++’. Sekiranya anda ingin mengetahui lebih lanjut, lihat di oleh Edureka, sebuah syarikat pembelajaran dalam talian yang dipercayai. Kursus latihan dan pensijilan Java J2EE dan SOA Edureka dirancang untuk melatih anda untuk konsep Java teras dan maju bersama dengan pelbagai kerangka kerja Java seperti Hibernate & Spring.

Ada soalan untuk kami? Sila sebutkan di bahagian komen blog ini dan kami akan menghubungi anda secepat mungkin.