Alokasi memori dinamis

Download Report

Transcript Alokasi memori dinamis

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
sizeof(int) returns how
we want
(remember them)
much memory a ‘int’
n ‘int’
that forces the variable
takes
to the right type (not
needed)
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;
for(i=0;i<n;i++)
{
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;
for(i=0;i<n;i++)
{
cout<<*vektor; //menampilkan bilangan
vektor++;
}
}
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