Bahasa C - Alokasi Memori Dinamis

Alokasi memori dalam C sangat penting untuk mencapai kinerja terbaik khususnya dalam aplikasi perangkat terintegrasi (embedded system). Bahasa asli C dapat gunakan untuk menangani alokasi memori dinamis.

Fitur dan kata kunci spesifik dapat digunakan untuk mengalokasikan data dalam memori untuk menentukan karakteristik data seperti waktu hidup, waktu pembuatan, ukuran, lokasi, dan sebagainya.

Standard librari C mengandung fungsi seperti ‘calloc ()’, ‘malloc ()’, ‘free()’, ‘realloc()’ untuk membantu programmer mengalokasikan memori dinamis, mengontrol penggunaan atau membebaskan memory.

C malloc()

C malloc () mengalokasikan memori secara dinamis di sub segmen memori tumpukan (stack) dan umurnya sepanjang lama operasi sedang alokasi data-nya hanya seumur fungsi malloc() tadi.

void * malloc( size_t size );

Alokasi memori menggunakan malloc()

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

int main()
{
     char *dynamicMem;
     dynamicMem = malloc( 20 * sizeof(char) );
     if( dynamicMem== NULL )
     {
        printf("Gagal mengalokasikan memory\n");
     }
     else
     {
        printf("Alamat Memory = %u\n", dynamicMem);
        strcpy( dynamicMem,"Percobaan memory");
     }
     printf("Memory yang dialokasikan : %s\n", dynamicMem );
     free(dynamicMem);  // Membebaskan memory
}

Keluaran

Alamat Memory = 13832208                                                                     
Memory yang dialokasikan : Percobaan memory  

C calloc()

Fungsi C calloc() mengalokasikan dan menginisialisasi beberapa blok memori dengan ukuran yang sama. Memori diinisialisasi bitnya dengan nol. Fungsi ini membutuhkan dua argumen.

void *calloc(n, size_t ukuran);

N adalah jumlah elemen. Ukuran adalah ukuran elemen.

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

int main()
{
     char *dynamicMem;
     int n=5;
     dynamicMem = (int*)calloc(n, sizeof(int));

     if( dynamicMem== NULL )
     {
        printf("Gagal mengalokasikan memory\n");
     }
     else
     {
        printf("Memory yang dialokasikan = %u\n", dynamicMem);
        strcpy( dynamicMem,"Percobaan memory");
     }
     printf("Memory yang dialokasikan: %s\n", dynamicMem );
     free(dynamicMem);  // Membebaskan memory
}

Output:

Memory yang dialokasikan: Percobaan memory

C realloc()

Fungsi realloc () berguna untuk mengubah ukuran memori yang tidak memadai.

ptr = realloc(ptr, newmemorysize);

Free()

Fungsi free () digunakan untuk membebaskan yang dialokasikan oleh malloc () atau calloc ().

Video