Alokasi memori dinamis
A closer look at malloc Let's look at that malloc statement again: sieve= (int *)malloc(n*sizeof(int)); This is a CAST (remember them) that forces the variable to the right type (not needed) we want n ‘int’ sizeof(int) returns how much memory a ‘int’ takes This says in effect "grab me enough memory for 'n' ‘int’"
Mengapa harus dilakukan alokasi memori dinamis? Contoh kasus: Buatlah suatu vektor yang berisi n buah bilangan! syarat : - n dan bilangan elemen vektor dimasukkan dari keyboard pada saat program berjalan - tampilkan vektor setelah n buah bilangan dimasukkan semua
Solusi menggunakan array Array alokasi memori statis int vektor[10];//mengalokasikan sebanyak 10 bilangan int i,n; main( ) { cout<<“masukkan n!”; cin>>n; //membaca n dari keyboard cout<<“masukkan bilangan!”<<endl; for(i=0;i<n;i++) cin>>vektor[i]; //membaca bilangan } cout<<“menampilkan vektor :”<<endl; cout<<vektor[i]; //menampilkan bilangan
Konsekuensi alokasi memori statis Banyaknya bilangan yang dapat diakses(banyaknya elemen vektor) maksimal hanya 10 buah (sesuai deklarasi arraynya) Untuk mengubah ukuran array tidak bisa dilakukan pada saat program berjalan (runtime) tetapi harus lewat source code-nya Misalnya ukuran array akan diubah menjadi 15, maka deklarasi array pada source code harus diubah menjadi: int vektor[15];
Solusi menggunakan pointer dan ‘malloc’ Alokasi memori dinamis int *vektor;//deklarasi pointer untuk memori penyimpan vektor int *catatan; int i,n; main( ) { cout<<“masukkan n!”; cin>>n; //membaca n dari keyboard vektor = (int *)malloc(n*sizeof(int));//alokasi memori catatan=vektor; cout<<“masukkan bilangan!”<<endl; for(i=0;i<n;i++) cin>>*vektor; //membaca bilangan vektor++; } cout<<“menampilkan vektor :”<<endl; vektor=catatan; cout<<*vektor; //menampilkan bilangan
Manfaat menggunakan alokasi memori dinamis Ukuran vektor (banyaknya bilangan) bisa menjadi tak terbatas (secara teoritis), tetapi dalam praktek dibatasi oleh ukuran memori hardware Ukuran vektor bisa ditentukan pada saat program berjalan, tidak perlu mengubah source code