Skip to main content

Structures and union and memory allocation


            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