ASD Alokasi Memori Dinamis Alokasi Memori Dinamis v
- Slides: 19
ASD Alokasi Memori Dinamis
Alokasi Memori Dinamis v Untuk menggunakan sebuah variabel, kita harus mendeklarasikannya dulu v Pada saat deklarasi, slot memori dipesan untuk dipakai oleh variabel tersebut v Setelah dideklarasikan, variabel bisa digunakan v Ada cara untuk membuat variabel tanpa deklarasi!!! v Variabel tersebut baru dibuat saat dibutuhkan ketika program berjalan!!! v Setelah selesai digunakan, variabel tersebut harus dihapus!!!
Fungsi-Fungsi Alokasi Memory
sizeof()
Latihan
Cara membuat variabel tanpa deklarasi 1. Deklarasikan pointer yang menunjuk variabel yang akan dibuat 2. Jika pada saat program berjalan variabel tersebut dibutuhkan Ø Pesan slot memori untuk menyimpan variabel (malloc) Ø Simpan alamat slot memori pada pointer no 1 Ø Gunakan variabel sesuai kebutuhan dengan cara akses tak langsung melalui pointer Ø Hapus variabel / lepas slot memori setelah variabel selesai digunakan (free)
Karakteristik Alokasi Memori Dinamis v Memori dapat dipesan atau dilepas sesuai kebutuhan pada saat program berjalan v Memesan slot memori menggunakan fungsi malloc v Melepas slot memori menggunakan fungsi free
malloc: memesan memori untuk variabel baru (tipedata *) malloc(size); Membuat pointer yang menunjuk slot memori yang dipesan. Tipe pointer sesuai tipe variabel yang dibuat malloc()prot malloc() otype ada di stdlib. h Banyaknya slot memori yang dipesan untuk menyimpan variabel baru ( gunakan fungsi sizeof()untuk sizeof() mengetahui ukuran variabel).
free: menghapus variabel setelah digunakan void free(p. Mem. Block); free() ada di stdlib. h Pointer yang menunjuk variabel IMPORTANT!!!!!!: IMPORTANT!!!!!! • jangan free()pointer yang tidak pernah di malloc() free() • Jangan free() pointer yang sudah difree • Selalu free()variabel yang sudah selesai digunakan. free() Jika tidak, akan menyebabkan: ‘memory leak’ leak – BAD!
Contoh tanpa malloc() #include <stdio. h> #include <conio. h> void main() { float jari, luas; jari = 7; luas = 3. 14 * jari; printf("lingkaran dengan jari-jari : %fn", jari); printf("luasnya : %fn", luas); getch(); }
Review Pointer
Contoh dengan malloc() #include <stdio. h> #include <conio. h> #include <stdlib. h> void main() { //deklarasi pointer float *pjari, *pluas; //memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer pjari = (float *)malloc(sizeof(float)); pluas = (float *)malloc(sizeof(float)); if (pjari != NULL && pluas != NULL){//jika berhasil memesan memori //gunakan variabel jari dan luas melalui pointer *pjari = 7; *pluas = 3. 14 * *pjari; printf("lingkaran dengan jari-jari : %fn", *pjari); printf("luasnya : %fn", *pluas); //menghapus atau melepaskan slot memori yang ditunjuk oleh pjari dan pluas free(pjari); free(pluas); } getch(); }
Contoh tanpa malloc() #include <stdio. h> #include <conio. h> struct motor{ float amps; float volts; }; typedef struct motor; void main() { motor m; m. volts = 4. 5; m. amps = 6; printf("volts = %f", m. volts); printf("amps = %f", m. amps); getch(); }
Latihan : dengan malloc? #include <stdio. h> #include <conio. h> #include <stdlib. h> struct motor{ float amps; float volts; }; typedef struct motor; void main() { motor *m; ? ? ? // Cek alokasi memory. . . // Free / bebaskan alokasi memory yang dipesan. . }
Peringatan!!! - malloc • Jika malloc() gagal memesan memori, akan mengembalikan NULL • Selalu cek apakah malloc() mengembalikan NULL: char *p. Msg; p. Msg = (char *) malloc (sizeof(char)); if (p. Msg == NULL) { printf(“Insufficient memory. Error Exitn”); return -1; }
Peringatan!!! malloc() • Selalu free() variabel yang sudah selesai dipakai • Jika tidak akan menyebabkan ‘memory leaks’ • Bisa terjadi crash karena kehabisan memori!
Peringatan!!! - free • Hati – hati!!! : Jangan pernah mem-free slot memori yang sudah di free! char *p. Msg, *p. Word, a. Letter; p. Msg = (char *) malloc (20 * sizeof(char); p. Word = p. Msg; /* both point to same byte 0 */ strcpy(p. Word, “Welcome!n”); /* use the memory */ free(p. Msg); /* Free the memory. */ free(p. Word); /* RUNTIME ERROR! No block to free! */
Peringatan!!! - free • free()membebaskan slot memori yang free() ditunjuk sebuah pointer. • Jika ada pointer lain yang menunjuk ke alamat slot yang sama, maka pointer tersebut menjadi invalid! Jangan difree lagi! char *p. Msg, *p. Word, letr = ‘A’; p. Msg = (char *) malloc /* p. Word = p. Msg; /* p. Msg = &a. Letter; /* free(p. Word); /* (20 * sizeof(char)); reserve a memory block */ another pointer to block*/ p. Msg now points to letr */ free the memory block */
- Cara kerja memori dinamis c++
- Alokasi memori pada sistem multiprogramming
- Kapasitas memori eksternal .... memori utama
- Alokasi dana lewat tingkat keuntungan
- Foh departementalisasi
- Aset alokasi tung desem waringin
- Alokasi pasien adalah
- Alokasi surplus hasil usaha
- Alokasi bop
- Alokasi neyman
- Secundum asd
- Que es una metodologia agil de desarrollo de software
- Asd
- Vidyo status
- Asd nedir
- Asdaha
- Familienberatung herford
- Dr ava ruth baker
- Big ass prof
- Types of autism spectrum disorder dsm 5