Lompat ke konten Lompat ke sidebar Lompat ke footer

Struct Hack Bahasa C dan Penjelasannya

Pada artikel ini akan dibahas tentang Struct Hack pada Bahasa C beserta penjelasan dan fungsi-fungsinya.

Struct Hack Bahasa C dan Penjelasannya
Struct Hack Bahasa C

Sebelum memahami lebih dalam materi tentang Struct Hack Bahasa C dan Penjelasannya, terlebih dahulu pelajari materi tentang: Union Bahasa C dan Penjelasannya [klik], Struct Bahasa C dan Penjelasannya [klik], dan Enum Bahasa C dan Penjelasannya [klik].

Apa yang akan menjadi nilai ukuran pada struct berikut?
struct employee
{
int emp_id;
int name_len;
char name[0];
};

4 + 4 + 0 = 8 bytes.

Berapa nilai ukuran dari "name[0]"?

Pada Igcc, ketika diciptakan array dari zero length, maka hal tersebut akan dianggap sebagai suatu nilai array dari tipe data yang tidak lengkap. Karena hal tersebut, maka gcc akan melaporkan nilai ukuran sebagai "0 bytes". Teknik ini dikenal dengan istilah "Struct Hack". Ketika diciptakan array dari zero length di dalam suatu struct, maka nilai tersebut harus dan hanya nilai dari anggota terakhir dari struct.

  
Teknik "Struct Hack" merupakan teknik yang digunakan untuk menciptakan suatu anggota panjang variabel pada suatu struct. Pada contoh struct sebelumnya, string length dari "name" belum ditetapkan, karena hal tersebut maka dapat digunakan "name" sebagai array variabel length.

struct employee *e = malloc(sizeof(*e) + sizeof(char) * 128);

adalah sama dengan

struct employee
{
int emp_id;
int name_len;
char name[128]; /* character array of size 128 */
};


Dan

struct employee *e = malloc(sizeof(*e) + sizeof(char) * 1024);

adalah sama dengan

struct employee
{
int emp_id;
int name_len;
char name[1024]; /* character array of size 1024 */
};

Catatan: karena name adalah suatu karakter array, maka pada malloc, ketimbang menggunakan "sizeof(char) * 128", maka dapat digunakan "128" secara langsung. sizeof digunakan untuk menghindari kebingungan pada program.

Sekarang dapat digunakan "name" sama seperti halnya penggunaan pointer.

e->emp_id = 100;
e->name_len = strlen("Geeks For Geeks");
strncpy(e->name, "Geeks For Geeks", e->name_len);


Ketika dialokasikan suatu memori menggunakan teknik yang dijelaskan sebelumnya, maka kompilator akan mengalokasikan memori untuk disimpan pada "emp_id" dan "name_len" dan contiguous memory untuk menyimpan "name". Ketika teknik ini digunakan, maka gcc akan menjamin "name" akan mendapatkan contiguous memory.

Tentunya ada cara lain untuk menyelesaikan masalah tersebut, salah satu solusinya adalah menggunakan pointer karakter. Namun tidak ada jaminan bahwa pointer karakter akan mendapatkan contiguous memory. Misalnya, dengan menggunakan teknik ini, kita dapat mengalokasikan dan membatalkan alokasi memori dengan menggunakan malloc tunggal dan panggilan bebas. Keuntungan lain dari teknik ini adalah, misalkan ingin dilakukan proses menulis data, maka hal tersebut dapat dilakukan pada seluruh data dengan menggunakan satu panggilan "write()" saja. Contoh;

write(fd, e, sizeof(*e) + name_len); /* write emp_id + name_len + name */

Jika digunakan pointer karakter, maka dibutuhkan 2 penulisan pemanggilan untuk memanggil data.

write(fd, e, sizeof(*e)); /* write emp_id + name_len */
write(fd, e->name, e->name_len); /* write name */


Catatan: Pada C99, terdapat suatu fitur yang disebut "flexible array members", yang bekerja sama seperti "Struct Hack".


Artikel ini didedikasikan kepada: Anggreani Eka Lestari, Cuwi Nurti Ningrum, David Aldi Ramadhani, Diska Choirunnisa, dan Dwi Setyawan.

5 komentar untuk "Struct Hack Bahasa C dan Penjelasannya"

  1. Apa yang dimaksud dengan struct hack pada Bahasa C?

    BalasHapus
    Balasan
    1. Teknik struct hack pada bahasa C merupakan teknik yang memberikan izin kepada pengguna untuk membuat anggota panjang variabel dalam suatu struct.

      Hapus
    2. Untuk menggunakan teknik struct hack, diperlukan array yang panjangnya 0, dimana ketika membuat array dengan nilai ukuran nol tersebut, maka struct akan menjadi tipe yang tidak lengkap.

      Hapus
    3. Struct Hack bahasa C merupakan tipikal struct yang elemen terakhirnya adalah array berukuran satu.

      Hapus
    4. Pada pemrograman bahasa C, user tidak dapat melakukan deklarasi memori untuk array pada waktu dinamis, tetapi dengan menggunakan struct hack, maka hal tersebut dapat dilakukan dengan cara mendeklarasikan array kosong dalam struct dan menentukan nilai penyimpanan untuk array tersebut pada saat program sedang berjalan.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -