Memory Allocation
1 Malloc (memory
allocation) berfungsi untuk mengalokasikan atau memesan memori secara dinamis,
fungsi ini akan mengembalikan void pointer yang memberikan alamat dari satu
blok memori di heap memory dengan jumlah byte yang sesuai dengan yang dibutuhkan.
Jika tempat yang dipesan tidak mencukupi maka pengalokasian gagal dan akan
mengembalikan NULL pointer.
Syntax:
void* malloc(size_t size);
Contoh: int *x = (int*) malloc(10*sizeof(int));
- Malloc mengembalikan void pointer maka perlu
di typecast menjadi pointer dari tipe data yang diinginkan, karena kita
menginginkan tipe data integer maka ditulis (int*).
- Fungsi sizeof digunakan untuk mengembalikan
ukuran tipe data dalam bytes.
- 10 adalah jumlah elemen/unit dari tipe data yang
diinginkan.
- Misalkan kita membutuhkan tempat untuk 10
integer karena ukuran integer adalah 4 bytes maka kita mengalokasikan memori
berukuran 40 bytes.
2 Calloc
(contiguous allocation) fungsinya mirip dengan malloc namun yang berbeda adalah
malloc tidak melakukan inisialisasi sedangkan calloc menginisialisasi nilai
memori yang dipesan menjadi nol.
Syntax:
void* calloc(size_t num, size_t size);
Contoh:
float *z=(float*) calloc(3,sizeof(float));
-
Calloc
membutuhkan 2 argumen yaitu jumlah elemen/tipe data yang diinginkan dan ukuran
dari tipe data tersebut.
3 Realloc berfungsi
untuk merubah ukuran dari memori yang sudah dialokasikan secara dinamis dengan
malloc atau calloc jika tidak maka akan menghasilkan undefined behaviour.
Digunakan ketika memori yang sudah dipesan tidak mencukupi atau lebih dari yang
dibutuhkan.
Syntax:
void* realloc(void *ptr, size_t size);
Contoh:
int *d = (int*) malloc(2*sizeof(int));
int *e = (int*) realloc(d, 3*(sizeof(int));
-
Realloc
membutuhkan 2 argumen, yang pertama adalah pointer terhadap alamat dari memori
yang sebelumnya sudah dialokasikan, dan yang kedua adalah ukuran dari blok
memori yang baru.
Struct and Union
1.
Struct
merupakan tipe data yang dapat menyimpan sekumpulan variable dengan tipe data
yang sama atau berbeda lalu dikelompokan menjadi satu tipe data, masing-masing
dari variable ini disimpan di memori yang berbeda-beda.
2.
Union
berfungsi untuk menyimpan variable dengan tipe data yang sama atau berbeda di
memori yang sama. Ukuran memori yang digunakan oleh semua anggota sama dengan
ukuran memori dari anggota dengan memori terbesar.
Contoh array of struct
#include<stdio.h>
#include<string.h>
struct
tmhs
{
char nim[9];
char name[26];
float gpa;
};
int
main (){
struct tmhs arr[50], x;
...
scanf("%s", &arr[0].nim);
...
x = arr[0];
arr[0] = arr[1];
arr[1] = x;
for (i = 0; i < 50; i++) {
printf("%s
%s %.2f",
arr[i].nim, arr[i].name,
arr[i].gpa);
}
return 0;
}
-typedef adalah nama lain atau nama pendek untuk identifier yang panjang, typedef biasanya digunakan di dalam structure.
Contoh:
typedef struct BinusStudent{
char name[20];
int
nim;
float gpa;
}Mhs;
Mhs adalah nama pendek/alias dari BinusStudent dan fungsinya adalah sebagai tipe data baru.
Comments
Post a Comment