Minggu, 22 November 2009

Kegunaan UNION pada C Programming Language

Bagi Anda yang pernah merasakan syntax bahasa pemrograman C, pernahkah Anda mendengar dengan istilah yang namanya Union??

Jika Anda sudah pernah dengar dan memahami maksudnya, maka silakan komentari tulisan saya ini jika tulisan saya ini mengandung kesalahan. Tetapi, jika Anda belum mendengar atau memahami maksud dari Union ini, saya ingin berbagi sedikit pengalaman saya dalam menggunakan Union di dalam bahasa C ini.

Biar lebih mudah dipahami, saya akan memberikan studi kasus. Misalkan, saya ingin membuat tipe struktur atau bentukan Matriks statis yang elemennya dapat berupa Integer, String, atau Float (setiap saat hanya salah satu). Perhatikan struktur dibawah ini,

#define BARIS 20
#define KOLOM 20


//cell / entri / elemen matrix
typedef struct tcell {
    ...
} cell;


//matrix
typedef struct tmatrix {
     cell mcell[BARIS][KOLOM];
}  matrix;

Sekarang, kita akan buat 2 jenis realisasi struktur cell diatas, yang menggunakan Union dan Tanpa Union.

// yang tanpa union
typedef struct tcell {
     // penanda tipe
     int flag_type;
     
     // isi cell 
     char* sval;
     int ival;
     float fval;
} cell;





// yang dengan Union
typedef struct tcell {
     // penanda tipe
     int flag_type;
     
     // isi cell 
     union {
         char* sval;
         int ival;
         float fval;
     } u;
} cell;

Lalu apa Bedanya antara kedua kode diatas ???

yang pertama(tanpa union), ketika struktur cell dialokasi di memori, ia akan mengalokasikan sebanyak jumlah elemen struktur yang ada.
misal,
untuk flag_type => int => 4 byte
untuk ival => int => 4 byte
untuk fval => float => X byte
untuk sval => char* => Y byte

total yang dialokasikan untuk jenis yang pertama = (8 + X + Y) Byte. Oleh karena yang digunakan / diisi hanya flag_type dan salah satu dari ival, fval, dan sval, maka cara diatas sangat tidak efisien, ini sama saja dengan boros memori, kita mengalokasikan tetapi tidak dipakai.

Solusinya adalah UNION (cara yang kedua).

Union akan mengalokasikan memori mulai dari Offset NOL, jadi misalkan sebelumnya diisi integer(ival), lalu diisi string(sval), pengisian sval tidak dilakukan di posisi yang disediakan khusus untuk sval, tetapi dari NOL lagi atau dari posisi awal, jadi nilai integer sebelumnya akan ditimpa. Dengan adanya Union, masalah boros alokasi / alokasi tapi tak terpakai selesai sudah...

Semoga tulisan ini bermanfaat, Jika ada yang salah saya mohon kritik dan masukan dari teman-teman semua....^_^




1 komentar:

  1. gan, saya sudah baca beberapa artikel agan, saya rasa agan adalah teman yang sedang saya cari, saya mencari orang yang membahas IT pada bagian2 yang unik dan lebih dalam, tidak hanya sekedar pembahasan umum, artikel ini sangat menjawab sekali. Mungkin kita bisa bahas lebih banyak masalah lainnya, contact saya di yoshuajoe@gmail.com.

    BalasHapus