Mempelajari Memori Manajemen dengan Bahasa C

Memori adalah salah satu hal yang penting dalam pemrograman, yaitu untuk menyimpan program, variabel dan melakukan operasi. Oleh karena itu, tanpa adanya memori program tidak bisa berjalan sebagai mana mestinya. Dengan demikian kita harus mengatur memori sebaik mungkin dengan mempelajari memori manajemen yang kali ini dengan bahasa C. Bukan hanya file yang kita miliki, melainkan penggunaan memori saat program berjalan.

C menyediakan berbagai fungsi untuk mengatur penggunaan memori (memory management) sehingga bahasa C mendukung Dynamic memory allocationDynamic memory allocation adalah proses untuk mengalokasikan maupun membebaskan memori sesuai dengan kebutuhan. Oleh karenanya kita dapat meminimalkan memori yang tidak akan kita gunakan. Untuk menggunakan fungsi-fungsi tersebut, kita butuh salah satu header, yaitu stdlib.h.

Daftar isi

malloc()

Fungsi ini berguna untuk mengalokasikan memori sebanyak yang diinginkan dalam besaran byte. Ketika menggunakan malloc(), fungsi akan mengembalikan alamat dari memori yang teralokasi. Oleh karena itu, akan lebih maksimal apabila menyimpannya dengan pointer. Secara umum, sintaks dari malloc() adalah

malloc(size);

Dengan sintaks tersebut, komputer akan mengalokasikan memori sebanyak size secara berurutan. Jadi program tidak akan menggunakan rentang memori tersebut untuk yang lainnya.

Contoh:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int *ptr = malloc(12);
    printf("%d\n", ptr);
}

Misalkan keluaran dari potongan kode tersebut adalah 1000, maka alamat 1000-1011 milik variabel ptr. Karena memori tersebut berurutan, kita juga dapat menggunakannya untuk membuat sebuah array. Contoh penggunaan malloc():

#include <stdio.h>
#include <stdlib.h>

int main(){
    int *arr = malloc(10 * sizeof(int));
    
    *arr = 100;
    *(arr+3) = 10;
    printf("%d %d\n",*arr, *(arr+3));
}

Pada contoh tersebut pengalokasian menggunakan parameter 10 * sizeof(int), artinya komputer harus mengalokasikan sebanyak 10*ukuran integer. Dengan kata lain, arr sama seperti array dengan kapasitas 10. Jadi keluaran program adalah 100 10 yang juga merupakan index ke-0 dan ke-3.

Fungsi ini akan mengembalikan sebuah alamat, sehingga ketika pengalokasian memori tidak berhasil maka fungsi akan mengembalikan nilai NULL. Dengan demikian perlu untuk memeriksa bahwa alokasi berhasil.

int *ptr = malloc(10*sizeof(*ptr));
if (ptr != NULL)

calloc()

Fungsi calloc() juga berfungsi untuk mengalokasikan memori, namun lebih sering untuk array dan struct. Sintaks fungsi ini sedikit berbeda dari malloc(). Perbedaanya terletak pada jumlah argumen, calloc() membutuhkan 2 parameter, yaitu jumlah elemen dan masing-masing ukuran (sama seperti contoh malloc() terakhir). Contoh:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int *arr = calloc(10, sizeof(int));
    
    for(int i=0;i<10;i++)
        *(arr+i) = i;

    for(int i=0;i<10;i++)
        printf("%d ", *(arr+i));
}

Contoh lain dengan menggunakan struct:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{
    int absen;
    char nama[50];
    char alamat[50];
}siswa_t;

int main(){
    siswa_t *rec = calloc(40, sizeof(siswa_t));
    for(int i=0; i<40; i++){
        char input[50];
        (rec+i)->absen = i+1;
        printf("Absen %d\t:\n", i+1);
        
        printf("Nama\t: "); gets(input); strcpy((rec+i)->nama, input);
        
        printf("Alamat\t: "); gets(input); strcpy((rec+i)->alamat, input);
    }
    for(int i=0; i<40; i++){
        printf("Absen %d:\n", i+1);
        printf("Nama\t: %s\n", (rec+i)->nama);
        printf("Alamat\t: %s\n", (rec+i)->alamat);
        printf("==============================\n");
    }
}

Pada baris 12 ada variabel rec yang berfungsi sebagai array siswa dan dapat menampung 40 data. Untuk mengakses index dapat dengan aritmetika pointer seperti penggunaan perulangan pada contoh.

Free()

Seperti namanya, fungsi ini adalah untuk membebaskan memori ketika memori tersebut sudah tidak dibutuhkan, meskipun memori tetap dibebaskan setelah program selesai dijalankan. Bebas artinya komputer dapat menggunakan kembali memori tersebut. Sintaks dari fungsi ini juga sederhana, yaitu

free(num);

Dengan num berisi alamat memori.

#include <stdio.h>
#include <stdlib.h>

int main() {  
  int *ptr;
  ptr = malloc(10*sizeof(*ptr));

  free(ptr);
}

realloc()

Fungsi ini merupakan fungsi untuk mengubah ukuran dari memori yang sudah teralokasi. Dengan dua parameter yaitu nama variabel dan ukuran memori baru.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *arr = malloc(10 * sizeof(int));
    if (arr != NULL)
    {
        *arr = 100;
        *(arr + 3) = 10;
        printf("%d %d\n", *arr, *(arr + 3));
    }

    arr = realloc(arr, 100 * sizeof(int));
    *(arr + 45) = 56;
    printf("%d %d\n", *arr, *(arr + 45));
}

arr awalnya memiliki kapasitas 10 yang kemudian menjadi 100 buah integer.

Mempelajari memori manajemen terutama dengan bahasa C sangat penting karena hal ini juga merupakan keunggulan dari bahasa C yang tidak semua bahasa pemrograman miliki. Dengan menggunakannya, tentu saja penggunaan memori jadi lebih efisien ketika program dijalankan.

Share Now:

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x

Follow TikTok Kami @cahinfor

Pembahasan soal tahun 2023 sudah tersedia di TikTok Kami loh!