C/C++ ile ilgilenen herkes en azından bir kere struct yazmıştır. Şimdi bir struct inceleyelim:
struct hede { char char_hedesi; int int_hedesi; char char_hedesi2; };
Peki bu bellekte kaç byte alan kaplar hesaplayalım: 2 char bide int yani 2*1 + 4 = 6 byte Fakat derleyiciyle bu yapının boyutunu hesaplarsak ilginç bir sonuç çıkıyor ortaya: 12 byte!! Burdan da anlayabileceğimiz üzere; C derleyicisi bir struct içinde değişken tanımladıktan sonra diğer değişkeni en yakın 4 byte öteye koyuyor:
Yani bellek şu şekilde - C - boş - boş - boş - int - int - int - int - C - boş - boş - boş Görüldüğü üzere 6 byte boşa harcanmış.. Bu yapıdan 1000 tane olursa 6000byte boşa gider..
Bu yüzden yapılması gereken; struct içinde değişkenleri, boyutları en az 4 byte yapacak şekilde bir araya getirmek..
Struct'u şu hale getirsek;
struct hede { char char_hedesi; char char_hedesi2; int int_hedesi; };
Peki bu dedigin her derleyicide aynı şekilde mi ? Yani bence yılların C'si boyle ilginclik yapmaması gerek. Yeni akıllı compiler lar bunu dogru sekilde yapamıyor mu?
evet bunu okumuştum ,sanırım bu derleyicilerin 32 bit olması ile alakalı ,işlemci bir adımda 32 işleyebildiği için galiba yani işlemci diyor ki ben 32bit bardakla su içerim sen ister doldur ,ister yarım olsun farketmez
struct hede {
char char_hedesi;
int int_hedesi;
char char_hedesi2;
};
Peki bu bellekte kaç byte alan kaplar hesaplayalım: 2 char bide int yani 2*1 + 4 = 6 byte
Fakat derleyiciyle bu yapının boyutunu hesaplarsak ilginç bir sonuç çıkıyor ortaya: 12 byte!!
Burdan da anlayabileceğimiz üzere; C derleyicisi bir struct içinde değişken tanımladıktan sonra diğer değişkeni en yakın 4 byte öteye koyuyor:
Yani bellek şu şekilde - C - boş - boş - boş - int - int - int - int - C - boş - boş - boş
Görüldüğü üzere 6 byte boşa harcanmış.. Bu yapıdan 1000 tane olursa 6000byte boşa gider..
Bu yüzden yapılması gereken; struct içinde değişkenleri, boyutları en az 4 byte yapacak şekilde bir araya getirmek..
Struct'u şu hale getirsek;
struct hede {
char char_hedesi;
char char_hedesi2;
int int_hedesi;
};
boyut: 8 byte
şu halde
struct hede {
char char_hedesi;
char char_hedesi2;
char char_hedesi3;
char char_hedesi4;
int int_hedesi;
};
Boyut: yine 8 byte
Evet küçücük bi yer değiştirmeyle 2 char daha koyup daha az bellek alanı kullandık
Buraya kadar okuyanlara teşekkürler... bilenler kusura bakmasın, bilmeyenlerin işine yarar umarım
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.