Packed Record Hk.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Nick_
Üye
Mesajlar: 122
Kayıt: 01 Eki 2007 09:28
Konum: Konya

Packed Record Hk.

Mesaj gönderen Nick_ »

S.a arkadaslar. Asagidaki tanımlamada ne yapilmak isteniyor? Bilgilendirirseniz sevinirim.

Deneme : Packed Record Case Byte Of
0 : (LngW:LongWord;);
1 : (LngI:LongInt;);
2 : (Byt4,Byt3,Byt2,Byt1:Byte;);
End =(LngW:0);
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Packed Record Hk.

Mesaj gönderen sabanakman »

Yanlış hatırlamıyorsam record tanımındaki her alan değişkeni 2'nin katları şeklinde bellekte yer kaplar. Bu tek byte lık tip olsa bile böyledir. Böylelikle record alan değerlerine erişim yüksek performans ile sağlanacaktır. Eğer performanstan ziyade bellekte kapladığı yer önemli ise her değişken tipi kadar yer kaplasın isteniyorsa o zaman da packed record tanımı kullanılmalı. Aynı record tanımları bu anahtar kelime ile bellekte kapladığı yer farklı olarak tanımlanabilir. Tabi bu noktada alan değerlerine erişim diğerine göre gecikmeli olacaktır.

Zaten konu internet üzerinde örneklerle incelenmiş sayfalara rastlayabilirsiniz.
http://www.delphibasics.co.uk/RTL.asp?Name=Packed


Sizin örneğe gelince zaten 4 byte değerinde bir yapı kullandığınız için Packed Record ile Record kullanılması arasında fark yoktur. Buradaki asıl nokta case ile kurulan yapı ile bu 4 byte lık alana değişik değişkenler aracılığıyla erişebilmek. Böylesi bir tanımda Deneme tipli bir yapıda LngW ile veya LngI ile 4 byte lık değer komple işlenebilir. Bu değişkenlerden birisine değer atamak diğer tüm alanların da değerini değiştirir. Çünkü bu değişkenler bellekte aynı adreste çakışık olarak tutulmaktadırlar. Tabi Byt4..Byt1 de aynı adresten başlayan ardışık 4 değişken olduğu için böylesi değişiklikler bu değişkenleri de etkileyecektir. Tersi durumda yani Byt4..Byt1 değişkenlerinden birinde yapılacak değişiklik LngW ve LngI değişkenlerinin değerini değiştirecektir. Bu hangi byte üzerinde ne yapıldığına bağlı olarak hesaplayabileceğiniz değişikliklerdir.

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var Den:Deneme;
begin
  Den.LngI:=-2133123;
  ShowMessage(IntToStr(Den.LngW));{LongWord tipi negatif değer tutmaz bellekteki karşılığı 4292834173{}
  ShowMessage(Format('4->%d 3->%d 2->%d 1->%d',[Den.Byt4,Den.Byt3,Den.Byt2,Den.Byt1]));
  Den.Byt4:=87;
  ShowMessage(Format('W->%s I->%d',[IntToStr(Den.LngW),Den.LngI]));
  ShowMessage(Format('4->%d 3->%d 2->%d 1->%d',[Den.Byt4,Den.Byt3,Den.Byt2,Den.Byt1]));
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
Nick_
Üye
Mesajlar: 122
Kayıt: 01 Eki 2007 09:28
Konum: Konya

Re: Packed Record Hk.

Mesaj gönderen Nick_ »

Verdiğiniz bilgiler için teşekkürler hocam.
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)
Cevapla