Capung

Tuesday, December 21, 2004

1+ 4 = 8 ?

Saya tidak bermaksud mengubah hukum penjumlahan, judul di atas hanya menggambarkan hal yang saya temui ketika sedang menulis program dalam C++ yang menggunakan operator sizeof terhadap suatu struct.

Misalkan kita mempunyai program sebagai berikut :

struct X {
char c;
};

struct Y {
float f;
};

struct Z {
char c;
float f;
};

int main()
{
printf("sizeof(X) = %d\n", sizeof(X));
printf("sizeof(Y) = %d\n", sizeof(Y));
printf("sizeof(Z) = %d\n", sizeof(Z));

return 0;
}

sizeof(X) jelas menghasilkan 1, sedangkan sizeof(Y) menghasilkan 4, sesuai dengan ukuran tipe data float yaitu 4 byte. Dari hasil di atas, secara sekilas saya menganggap bahwa sizeof(Z) akan menghasilkan 5, tapi setelah saya coba compile dengan compiler gcc dan jalankan program di atas, ternyata sizeof(Z) menghasilkan 8. Bila di struct Z saya tambahkan satu field bertipe char, hasil yang diperoleh tetap 8. Tetapi bila ditambahkan satu field bertipe float maka hasilnya menjadi 12.
Pertama saya mengambil kesimpulan bahwa ukuran struct selalu dibulatkan ke kelipatan 4 terdekat. Tapi kemudian saya mencoba struct sebagai berikut :
struct N {
char c;
char d[5];
};
Hasil dari sizeof(N) ternyata sesuai dengan penjumlahan ukuran fieldnya, yaitu 6. Berarti kesimpulan saya tadi tidak benar. Mungkin dari pembaca ada yang dapat membantu menjelaskan masalah ini ?

1 Comments:

  • Ah, ternyata ini cuma masalah struct member alignment. Pokoknya, kalau mau menghitung ukuran struct jangan diitung sendiri, tapi pake sizeof.

    By Blogger Rulli, at 7:46 AM  

Post a Comment

<< Home