Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Memori Dinamis C++

Pemahaman yang baik tentang bagaimana memori dinamis benar-benar bekerja di C++ sangat penting untuk menjadi programmer C++ yang baik. Memori dalam program C++ Anda dibagi menjadi dua bagian −

Sering kali, Anda tidak mengetahui sebelumnya berapa banyak memori yang Anda perlukan untuk menyimpan informasi tertentu dalam variabel yang ditentukan dan ukuran memori yang diperlukan dapat ditentukan pada saat dijalankan.

Anda dapat mengalokasikan memori saat run time dalam heap untuk variabel dari tipe tertentu menggunakan operator khusus di C++ yang mengembalikan alamat ruang yang dialokasikan. Operator ini disebut baru operator.

Jika Anda tidak lagi membutuhkan memori yang dialokasikan secara dinamis, Anda dapat menggunakan delete operator, yang membatalkan alokasi memori yang sebelumnya dialokasikan oleh operator baru.

Operator baru dan hapus

Berikut sintaks generik untuk menggunakan baru operator untuk mengalokasikan memori secara dinamis untuk semua tipe data.

new data-type;

Di sini, tipe data bisa berupa tipe data bawaan apa pun termasuk larik atau tipe data apa pun yang ditentukan pengguna termasuk kelas atau struktur. Mari kita mulai dengan tipe data bawaan. Misalnya kita dapat mendefinisikan pointer untuk mengetik ganda dan kemudian meminta agar memori dialokasikan pada waktu eksekusi. Kita dapat melakukan ini dengan menggunakan baru operator dengan pernyataan berikut

double* pvalue  = NULL; // Pointer initialized with null
pvalue  = new double;   // Request memory for the variable

Memori mungkin tidak berhasil dialokasikan, jika penyimpanan gratis telah habis. Jadi praktik yang baik untuk memeriksa apakah operator baru mengembalikan pointer NULL dan mengambil tindakan yang sesuai seperti di bawah ini −

double* pvalue  = NULL;
if( !(pvalue  = new double )) {
   cout << "Error: out of memory." <<endl;
   exit(1);
}

malloc() fungsi dari C, masih ada di C++, tetapi disarankan untuk menghindari penggunaan fungsi malloc(). Keuntungan utama dari new over malloc() adalah new tidak hanya mengalokasikan memori, tetapi juga membangun objek yang merupakan tujuan utama C++.

Kapan saja, ketika Anda merasa variabel yang telah dialokasikan secara dinamis tidak lagi diperlukan, Anda dapat mengosongkan memori yang ditempatinya di penyimpanan gratis dengan operator 'hapus' sebagai berikut −

delete pvalue;        // Release memory pointed to by pvalue

Mari kita letakkan konsep di atas dan bentuk contoh berikut untuk menunjukkan cara kerja 'baru' dan 'hapus' −

Demo Langsung
#include <iostream>
using namespace std;

int main () {
   double* pvalue  = NULL; // Pointer initialized with null
   pvalue  = new double;   // Request memory for the variable
 
   *pvalue = 29494.99;     // Store value at allocated address
   cout << "Value of pvalue : " << *pvalue << endl;

   delete pvalue;         // free up the memory.

   return 0;
}

Jika kita mengkompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil sebagai berikut

Value of pvalue : 29495

Alokasi Memori Dinamis untuk Array

Pertimbangkan Anda ingin mengalokasikan memori untuk array karakter, yaitu string 20 karakter. Menggunakan sintaks yang sama dengan yang kita gunakan di atas, kita dapat mengalokasikan memori secara dinamis seperti yang ditunjukkan di bawah ini.

char* pvalue  = NULL;         // Pointer initialized with null
pvalue  = new char[20];       // Request memory for the variable

Untuk menghapus array yang baru saja kita buat, pernyataan akan terlihat seperti ini

delete [] pvalue;             // Delete array pointed to by pvalue

Mengikuti sintaks generik serupa dari operator baru, Anda dapat mengalokasikan untuk array multi-dimensi sebagai berikut −

double** pvalue  = NULL;      // Pointer initialized with null 
pvalue  = new double [3][4];  // Allocate memory for a 3x4 array 

Namun, sintaks untuk melepaskan memori untuk array multidimensi akan tetap sama seperti di atas −

delete [] pvalue;            // Delete array pointed to by pvalue

Alokasi Memori Dinamis untuk Objek

Objek tidak berbeda dengan tipe data sederhana. Sebagai contoh, perhatikan kode berikut di mana kita akan menggunakan array objek untuk memperjelas konsep −

Demo Langsung
#include <iostream>
using namespace std;

class Box {
   public:
      Box() { 
         cout << "Constructor called!" <<endl; 
      }
      ~Box() { 
         cout << "Destructor called!" <<endl; 
      }
};
int main() {
   Box* myBoxArray = new Box[4];
   delete [] myBoxArray; // Delete array

   return 0;
}

Jika Anda mengalokasikan array empat objek Box, konstruktor Simple akan dipanggil empat kali dan sama halnya saat menghapus objek ini, destruktor juga akan dipanggil dengan jumlah yang sama.

Jika kita mengkompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil sebagai berikut

Constructor called!
Constructor called!
Constructor called!
Constructor called!
Destructor called!
Destructor called!
Destructor called!
Destructor called!

Bahasa C

  1. Tipe Data C++
  2. Operator C++
  3. Komentar C++
  4. C - Manajemen Memori
  5. Ikhtisar C++
  6. Konstanta/Literal C++
  7. Operator di C++
  8. Angka dalam C++
  9. Referensi C++
  10. Memori Dinamis C++