Bagaimana Bekerja Dengan Alokasi Memori Dinamis C ++?



Artikel ini membahas Alokasi Memori Dinamis Dalam C ++, fitur penting yang memungkinkan Anda mempertimbangkan kebutuhan memori untuk sumber daya waktu nyata.

Alokasi Memori Dinamis Dalam C ++ adalah fitur yang sangat penting yang memungkinkan Anda mempertimbangkan kebutuhan Anda untuk menangani kebutuhan sumber daya waktu nyata. Dalam artikel ini kita akan menjelajahi Eksplorasi secara detail. Petunjuk berikut akan dibahas dalam artikel ini,

Jadi mari kita mulai dengan artikel ini tentang Alokasi Memori Dinamis di C ++





Butuh alokasi memori dinamis?

Katakanlah, kami ingin memasukkan kalimat sebagai array karakter tetapi kami tidak yakin tentang jumlah pasti karakter yang diperlukan dalam array.

Sekarang, saat mendeklarasikan array karakter, jika kita menentukan ukurannya lebih kecil dari ukuran string yang diinginkan, maka kita akan mendapatkan kesalahan karena ruang dalam memori yang dialokasikan ke array lebih kecil dibandingkan dengan ukuran string input. Jika kita menentukan ukurannya lebih besar dari ukuran string input, maka array akan dialokasikan ruang dalam memori yang jauh lebih besar dari ukuran string yang diinginkan, sehingga tidak perlu menghabiskan lebih banyak memori bahkan ketika tidak diperlukan.



apa itu acara javascript

Dalam kasus di atas, kami tidak memiliki gagasan tentang ukuran larik yang tepat hingga waktu kompilasi (saat komputer mengompilasi kode dan string dimasukkan oleh pengguna). Dalam kasus seperti itu, kami menggunakan baru operator.

C ++ mendefinisikan dua operator unary baru dan menghapus yang melakukan tugas mengalokasikan dan membatalkan alokasi memori selama runtime. Karena operator ini (baru dan hapus) beroperasi pada memori penyimpanan bebas (memori Heap), mereka juga disebut operator penyimpanan gratis. Pointer memberikan dukungan yang diperlukan untuk sistem alokasi memori dinamis di C ++.

Dengan bantuan Alokasi Dinamis, program dapat memperoleh memori selama runtime.



Variabel global dan lokal dialokasikan ke memori selama waktu kompilasi. Namun, kami tidak dapat menambahkan variabel global atau lokal selama runtime. Jika program perlu menggunakan sejumlah variabel memori, kita perlu mengalokasikan memori selama runtime, jika diperlukan. Dan tentu saja, di sini rutinitas alokasi dinamis dapat memenuhi tujuan tersebut.

Perbedaan antara alokasi memori statis dan alokasi memori dinamis:

Ini adalah arsitektur memori dasar yang digunakan untuk program C ++ apa pun:

Memori - Alokasi Memori Dinamis - Edureka

Kami membutuhkan gambar seperti ini

Tumpukan digunakan untuk alokasi memori statis dan Heap untuk alokasi memori dinamis, keduanya disimpan di RAM komputer.

Variabel yang dialokasikan di stack sementara alokasi memori statis disimpan langsung ke memori dan akses ke memori ini sangat cepat, juga alokasinya ditangani ketika program dikompilasi. Ketika sebuah fungsi atau metode memanggil fungsi lain yang mungkin pada gilirannya memanggil fungsi lain dan seterusnya, eksekusi semua fungsi ini tetap ditangguhkan hingga fungsi terakhir mengembalikan nilainya. Tumpukan selalu disimpan dalam urutan LIFO (terakhir masuk pertama keluar), blok terakhir yang dicadangkan selalu menjadi blok berikutnya yang akan dibebaskan. Ini membantu untuk melacak tumpukan, membebaskan satu blok dari tumpukan tidak lebih dari menyesuaikan satu penunjuk.

Variabel yang dialokasikan di heap memiliki memori yang dialokasikan pada waktu proses sementara alokasi memori dinamis. Mengakses memori ini sedikit lebih lambat dibandingkan dengan stack, tetapi ukuran heap hanya dibatasi oleh ukuran memori virtual. Elemen heap tidak memiliki ketergantungan satu sama lain dan selalu dapat diakses secara acak kapan saja. Kami dapat mengalokasikan satu blok kapan saja dan membebaskannya kapan saja. Hal ini membuat sulit untuk melacak bagian mana dari heap yang dialokasikan atau dialokasikan pada waktu tertentu.

Pindah dengan artikel ini tentang Alokasi Memori Dinamis di C ++

Alokasi Memori menggunakan baru Kata kunci

Di C ++ file baru operator digunakan untuk mengalokasikan memori pada waktu proses dan memori dialokasikan dalam byte. Itu baru operator menunjukkan permintaan alokasi memori dinamis pada Heap. Jika tersedia cukup memori maka file baru operator menginisialisasi memori dan mengembalikan alamat dari memori yang baru dialokasikan dan diinisialisasi ke variabel pointer.

Sintaksis:

datatype * pointer_name = datatype baru

Contoh:

int * ptr = new int // Kita dapat mendeklarasikan variabel sementara alokasi dinamis dengan dua cara berikut. int * ptr = new int (10) int * ptr = new int {15} // operator baru juga digunakan untuk mengalokasikan sebuah blok (sebuah larik) memori tipe data. int * ptr = new int [20] // Pernyataan di atas secara dinamis mengalokasikan memori untuk 20 integer secara terus menerus dari tipe int dan mengembalikan sebuah pointer ke elemen pertama dari urutan ke pointer 'ptr'.

Catatan : Jika heap tidak memiliki cukup memori untuk dialokasikan, permintaan baru menunjukkan kegagalan dengan menampilkan pengecualian std :: bad_alloc, kecuali 'nothrow' digunakan dengan operator baru, dalam hal ini ia mengembalikan pointer NULL. Oleh karena itu, merupakan praktik yang baik untuk memeriksa variabel pointer yang dihasilkan oleh new sebelum menggunakannya dalam program.

Pindah dengan artikel ini tentang Alokasi Memori Dinamis di C ++

Deallokasi penggunaan memori menghapus Kata kunci:

Setelah memori heap dialokasikan ke variabel atau objek kelas menggunakan baru kata kunci, kita dapat membatalkan alokasi ruang memori tersebut menggunakan menghapus kata kunci.

Sintaksis:

delete pointer_variable // Di sini, pointer_variable adalah pointer yang menunjuk ke objek data yang dibuat oleh new. delete [] pointer_variable // Untuk membebaskan memori array yang dialokasikan secara dinamis yang ditunjukkan oleh pointer-variabel, kami menggunakan bentuk delete berikut:

Contoh:

hapus ptr hapus [] ptr

Catatan : Jangkauan objek atau masa pakai objek adalah waktu di mana objek tetap berada dalam memori selama eksekusi program. Alokasi Heap Memory lebih lambat daripada stack, karena, dalam heap, tidak ada urutan tertentu yang dapat Anda gunakan untuk mengalokasikan memori, sedangkan dalam stack mengikuti LIFO.

Pindah dengan artikel ini tentang Alokasi Memori Dinamis di C ++

Mengalokasikan Array Secara Dinamis

Kegunaan utama dari konsep alokasi memori dinamis adalah untuk mengalokasikan memori ke sebuah array ketika kita harus mendeklarasikannya dengan menentukan ukurannya tetapi tidak yakin tentangnya.

Mari kita lihat, contoh untuk memahami penggunaannya.

#include using namespace std int main () {int len, sum = 0 cout<< 'Enter the no. of students in the class' <>len int * marks = new int [len] // Cout alokasi memori dinamis<< 'Enter the marks of each student' << endl for( int i = 0 i>* (tanda + i)} untuk (int i = 0 i

Penjelasan:
Dalam contoh ini, pertama-tama kami meminta pengguna untuk jumlah siswa di kelas dan kami menyimpan nilainya di variabel len. Kemudian kita mendeklarasikan array integer dan mengalokasikannya ruang dalam memori secara dinamis sama dengan nilai yang disimpan dalam variabel len menggunakan pernyataan ini int * marks = new int [length] sehingga dialokasikan ruang yang sama dengan 'length * (ukuran 1 bilangan bulat)'. Sisa kode sudah cukup jelas.

Pindah dengan artikel ini tentang Alokasi Memori Dinamis di C ++

Alokasi Memori Dinamis untuk Objek

Kami juga dapat mengalokasikan objek secara dinamis.

Seperti yang kita ketahui bahwa Constructor adalah fungsi anggota kelas khusus yang digunakan untuk menginisialisasi suatu objek dan Destruktor juga merupakan fungsi anggota kelas yang dipanggil setiap kali objek keluar dari ruang lingkup.

Destruktor dapat digunakan untuk melepaskan memori yang ditetapkan ke objek. Itu dipanggil dalam kondisi berikut.

  • Saat objek lokal keluar dari ruang lingkup
  • Untuk objek global, ketika operator diterapkan ke pointer ke objek kelas

Kita dapat kembali menggunakan pointer sambil mengalokasikan memori ke objek secara dinamis.

Mari kita lihat contoh larik objek.

#include using namespace std class Random {public: Random () {cout<< 'Constructor' << endl } ~Random() { cout << 'Destructor' << endl } } int main() { Random* a = new Random[3] delete [] a // Delete array return 0 } 

Keluaran:

Penjelasan:

cara menggunakan python di anaconda

Konstruktor akan dipanggil tiga kali karena kita mengalokasikan memori ke tiga objek kelas Random. Destruktor juga akan dipanggil tiga kali pada masing-masing objek ini. 'Random * a = new Random [3]' pernyataan ini bertanggung jawab untuk alokasi memori dinamis dari objek kita.

Jadi kami telah sampai pada akhir artikel ini tentang 'Dynamic Memory Allocation C ++'. Jika Anda ingin mempelajari lebih lanjut, lihat oleh Edureka, perusahaan pembelajaran online terpercaya. Kursus pelatihan dan sertifikasi Java J2EE dan SOA dari Edureka dirancang untuk melatih Anda baik konsep inti dan lanjutan Java bersama dengan berbagai kerangka kerja Java seperti Hibernate & Spring.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar blog ini dan kami akan menghubungi Anda kembali secepatnya.