global değişkenleri hafızadan atmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

global değişkenleri hafızadan atmak

Mesaj gönderen ozsal »

s.a arkadaslar

ilk olarak sürekli olarak soru sorduğum için kusura bakmayın. ama en yakın zamanda ben de foruma faydalı bir üye haline geleceğim.
:D
şimdiki sorum şu:

Bu her formdan gorulebilen global değişkenleri
hafızadan atma yolu nedir acaba?

mesela

var
adi:string


bunu
adi.free gibi yazmaya calısınca olmuyo :D
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Global değişkenler stack'te tanımlandıkları için bellekten atamazsınız. Ancak örnekteki string ifadenin boyutunu azaltabilirsiniz. Bunun da bellek yönetimi açısından pek bir etkisi olmaz. Uğraşmayın.

Olabildiğince global değişken kullanımını azaltmaya çalışın. Procedure ve functionlar içerisinde tanımladığınız değişkenler, procedure ve func. çıkışında bellekten silineceklerdir. ;)
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

fduman yazdı:Global değişkenler stack'te tanımlandıkları için bellekten atamazsınız. Ancak örnekteki string ifadenin boyutunu azaltabilirsiniz. Bunun da bellek yönetimi açısından pek bir etkisi olmaz. Uğraşmayın.
Klavyen sürçtü herhalde @fduman (aka coderlord :) ) Benim bildiğim global değişkenler Process'in hafıza layoutunda .data bölümünde program sonlanana kadar durur. Stack'te procedure lerde tanımlanan değişkenler ve procedure çağırımında push edilen parametreler tutuluyor.
Global değişkenler için ayrılan yer program bitene kadar durur. Şuda varki string delphide compiler-managed olarak heapte tutulur. Heap process'in dinamik bellek alanıdır. Var a:string olarak tanımladığında a aslında stringin heapteki adresini gösteren 2byte lık pointerdan başka bişey değildir aslında. Yani referans değişkendir. Ve programcı a:='' yaparsa heapten otomatik olarak silinir. Objectleride kullanırken referans değişken kullanırız ama onları programcı create/free eder.
Velhasıl kelam, 2 byte için boşuna free olaylarına gerek yok. Maliyeti daha fazla olur. Zaten yoluda varmı bilmiyorum.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

undefined yazdı:Klavyen sürçtü herhalde @fduman (aka coderlord :) ) Benim bildiğim global değişkenler Process'in hafıza layoutunda .data bölümünde program sonlanana kadar durur. Stack'te procedure lerde tanımlanan değişkenler ve procedure çağırımında push edilen parametreler tutuluyor.
Haklısın heta olmuş. :P Stack'te tutulmuş olsa bunun management'ı nasıl olurdu hayal bile edemiyorum. :)
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

evet.
teşekkür ederim arkadaslar ilgilendiginiz için.
@undefined :)

a:='' yapınca oluyomuş:)
Cevapla