Ikutan nimbrung.
Pada setiap program biasanya daerah atau section memory dibagi menjadi
byte alignment, word alignment dan double word alignment. Pada
penggunaan struct, compiler cukup inteligent untuk menentukan, dimana
variabel dari struc yang bersangkutan disimpan. Pada struct yang berisi
word, maka variabel bersangkutan akan disimpan di section yang word
alignment. Jika dalam structz ada variabel bertipe data long, maka
tentu saja akan disimpan di section yang long alignment. Dengan
demikian, maka aritmetik pointer atau aritmetik pengadresan bergantung
pada section memori ini. Seperti pada section long alignment, maka
setiap inkrementasi dari pointer akan ditambah dengan sizeof(long). 
Dengan demikian fungsi sizeof dari sebuah struct sangat bergantung dari
tipe data dalam struktur tersebut.

Kalau ada yang mau mencoba (biasanya pada pemrograman mikrokontroller
atau sistem embeddded), biasanya compiler akan support statement
#pragma yang bisa mem-force agar variabel atau struct tertentu ditaruh
di section tertentu. Nah seandainya kita mempunyai struct yang
mempunyai data tipe long, dan kita force (dengan statement #pragma)
agar variabel tersebut diletakkan di section yang word alignment, maka
akan ada compiler error.

Eko

 --- arief# <[EMAIL PROTECTED]> schrieb: 
> Kalo gak salah,
> 
> struct memang ada hole-nya ya?
> Jadi walaupun seharusnya 14, dan kalo di-sizeof per struct member,
> pasti
> juga kalo dijumlah hasilnya 14, 
> gara-gara struct-hole ini, dia dibuletin jadi 16.
> 
> read it somewhere in K&R, I think.
> 
> 
> Salam hangat.
> -arief
> 
> 
> On Wed, 2004-09-01 at 13:43, david wrote:
> > mungkin ini merupakan bug dari gcc, versi yang gw
> > gunakan 
> > gcc version 3.3.4
> > dengan parameter pada saat build adalah:
> > Configured with: ../gcc-3.3.4/configure --prefix=/usr
> > --enable-shared --enable-threads=posix
> > --enable-__cxa_atexit --disable-checking --with-gnu-ld
> > --verbose --target=i486-slackware-linux
> > --host=i486-slackware-linux
> > Thread model: posix
> > 
> > bugnya adalah pada operasi sizeof, kode ini
> > menghasilkan hasil sizeof yang salah:
> > typedef struct tagBITMAPFILEHEADER {
> >         unsigned short bftype;
> >         unsigned long  bfsize;
> >         unsigned short bfreserved1;
> >         unsigned short bfreserved2;
> >         unsigned long  bfOffBits;
> > } BITMAPFILEHEADER;
> > 
> > apabila structure di atas di cari ukurannya dengan
> > menggunakan operasi sizeof, sizeof(BITMAPFILEHEADER)
> > maka menghasilkan nilai 16, tetapi menurut perhitungan
> > saya kalo ga salah nilai seharusnya adalah 14
> > 
> > ada di antara saudara yang mengalami hal yang sama,
> > saya baru mencobanya pada satu komputer yang
> > menggunakan slackware 10.0 dan juga dicobakan pada
> > DEV-CPP versi 4.9.0 dengan hasil yang sama.
> > 
> > Belum ada penyelesaian untuk "bug" ini selain
> > menghitung sizeof untuk masing-masing element dari
> > structure di atas :(
> > 


=====
Software is more than just programming


        

        
                
___________________________________________________________
Gesendet von Yahoo! Mail - Jetzt mit 100MB Speicher kostenlos - Hier anmelden: 
http://mail.yahoo.de

-- 
Berhenti langganan: [EMAIL PROTECTED]
Arsip dan info: http://linux.or.id/milis.php

Kirim email ke