Alokasi memori dinamis A closer look at malloc

  • Slides: 7
Download presentation
Alokasi memori dinamis

Alokasi memori dinamis

A closer look at malloc • Let's look at that malloc statement again: sieve=

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

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

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

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

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

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