Dalam pemrograman C, alokasi memori dapat dilakukan secara statis, otomatis dan dinamis. Variabel sementara dialokasikan pada memory utama, dan lamanya sesuai dengan lama program dijalankan. Sedangkan variabel berdurasi otomatis memorinya dialokasikan pada tumpukan memory(stack) dan muncul kembali setelah dipanggil. Pada alokasi memory seperti ini ukuran alokasi memory membutuhkan waktu compiling yang tetap. Waktu pengalokasian memory juga perlu diperhatikan. Memory yang dialokasikan secara otomatis tidak bisa berlangsung melalui pemanggilan fungsi secara bersamaan sedangkan memory yang dialokasikan secara statis tidak dapat diketahui secara pasti apakah alokasi tersebut diperlukan atau tidak. Pada beberapa situasi tertentu, programmer membutuhkan waktu pengalokasikan memory yang jauh lebih fleksibel.
Keterbatasan tersebut dapat dihindari dengan pengalokasian memory secara dinamis.
- Fungsi malloc
Dalam hal ini memory dialokasikan lebih eksplisit namun lebih fleksibel. Dalam bahasa pemrograman C, fungsi ini terdapat pada malloc. Malloc digunakan untuk mengatur alokasi memory pada heap. Pengaksesan blok memory dilakukan melalui sebuah pointer yang dikembalikan oleh malloc. Ketika alokasi memory tersebut tidak lagi dibutuhkan oleh program, pointer membebaskan memory tersebut untuk dialokasikan kembali untuk variabel lain yang dibutuhkan program.
Dalam bahasa C, fungsi standart malloc digunakan untuk pengalokasian memory. Pendeklarasian fungsi malloc adalah:
Void *malloc (size_t size);
yang mengalokasikan memory sebanyak size bit. Jika pengalokasian berhasil, pointer dari blok memory yang digunakan akan dikembalikan, jika tidak, null pointer akan dikembalikan ke fungsi.
Alokasi memory dengan menggunkan malloc akan berlanjut apabila momory yang dialokasikan dibebaskan oleh programmaer secara eksplisit (tidak bisa berlangsung secara otomatis). Pembebasan memory yang tidak dipakai lagi adalah dengan fungsi free. Pendeklarasian fungsi tersebut adalah :
void free(void *pointer);
yang membebaskan memory yang telah dialokasikan melalui pointer. Pointer harus sudah dikembalikan (return) oleh fungsi malloc, calloc, dan realloc. Pointer hanya dapat dibebaskan satu kali.
Contoh penggunaan malloc dalam bahasa C pada array 1 dimensi.
int * y = (int *) malloc(sizeof(int));
- Fungsi calloc
Malloc mengembalikan blok memory yang dialokasikan progarammer untuk diguanakan tetapi belum diinisialiasasi. Umumnya memory akan menginisialisasi sendiri jika dibutuhkan. Atau dengan menggunakan fungsi memset atau dengan satu atau lebih rangkaian statement melalui pointer. Salah satu alternatif yang dapat digunakan adalah dengan menggunakan fungsi calloc, yang mengalokasi kemudian menginisialisainya, pendeklarasiannya yaitu : void *calloc(baris a, kolom b);
yang mengalokasikan sebagian memory kemudian menginisialisasinya dengan nilai 0, dan ukurannya a x b.
- Fungsi realloc
Dalam membuat suatu program, akan sangat berguna jika bisa memperbesar atau memperkecil alokasi memory. Ini semua dapat dilakukan dengan menggunakan fungsi realloc yang mengembalikan pointer pada bagian memory dengan ukuran tertentu yang memuat data yang sama dengan bagian awal yang ditunjuk pointer. Jika realloc dapat mengalokasi memory kembali dengan ukuran berbeda, realloc akan mengalokasikan tempat kosong untuk file, mengcopy data yang dibutuhkan, dan membebaskan pointer sebelumnya. Jika alokasi kembali gagal, realloc mengatur kembali pointer aslinya dan mengembalikan nilai null. Memory yang telah dialokasikan kembali belum diinisialisasi (isinya tidak tentu). Fungsi realloc dideklarasikan dengan :
void *realloc(void *pointer, ukuran);
Realloc berfungsi sebagai malloc jika argumen pertama bernilai null.
void *x = realloc (NULL, 20);
sama dengan
void *x = malloc(20);
Pada 89C standar, realloc dengan panjang null sama dengan memory bebas/ free(). Pada 99C standar ini tidak lagi menjadi masalah. Dalam standar 99C, alokasi memory realloc dengan panjang null dikurangi hingga nol dan pointer bukan null dikembalikan ke fungsi. Dalam penggunaan realloc selalu ada 1 variabel yang menjadi variabel sementara.
· Kegunaan Malloc dan Akibatnya Bila Tidak Digunakan Malloc
1. Kegunaan malloc yaitu mengalokasikan memory pada heap hanya pada saat diperlukan saja, setelah tidak diperlukan lagi, memory dapat dibebaskan lagi.
2. Akibat bila tidak digunakan malloc yaitu tidak dapat terjadi alokasi memory secara dinamis sehingga dapat terjadi pengalokasian memory yang tidak perlu. Selain itu memory juga tidak bisa dibebaskan sebelum program berakhir.
· Contoh Array 2 Dimensi dengan Menggunakan Fungsi Malloc
// Contoh aplikasi malloc pada array 2 Dimensi
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void arr(int**,int,int);
void deallocate(int**);
main()
{
char j = 'y';
int **baris;
int r, c;
printf("Masukkan angka sebagai jumlah baris dan kolom \n");
while (j == 'y' || j == 'Y')
{
printf("row = ");scanf("%d",&r);
printf("column = ");scanf("%d",&c);
printf("\n\n");
arr(baris,r,c);
deallocate(baris);
printf("ulang?>y/n ");scanf(" %c",&j);
}
}
void arr(int** p, int a, int b)
{
p = ( int** )malloc( (a)*sizeof( int* ) );
int x,y;
for(x = 0; x < a; x++)
{
p[x] = ( int* )malloc( (b)*sizeof( int ) );
}
for(x = 0; x < a; x++)
for (y = 0; y < b; y++)
{
printf("p[%d][%d] = ",x,y);scanf("%d",&p[x][y]);
}
printf("\n\n");
for(x = 0; x < a; x++)
for (y = 0; y < b; y++)
{
printf("%d ",p[x][y]); // menampilkan bentuk array 2 Dimensi
if (y == b-1)
printf("\n");
}
}
void deallocate(int** p)
{
free(p); // membebaskan alokasi memory
}
4 comments:
wah postingan yg bagus
kunjungi juga ya
jejaringsosialinternet.blogspot.com
slam kenal :-)
Okee.. salam kenal juga deh :)
Terimakasin :D sangat membantu dasar pemrograman :D hehehe
main ke sini
www.fabrian.web.id
Sangat berguna gan terimakasih ~
Post a Comment