From: Serdar KÖYLÜ (serdarkoylu@fisek.com.tr)
Date: Fri 08 Aug 2003 - 14:15:53 EEST
Selamlar..
On Fri, 8 Aug 2003 00:24:37 +0300
Halil Demirezen <halild@bilmuh.ege.edu.tr> wrote:
> Boylece 100 nolu stack icinde 2400 degeri var;
> Benim soru burada: C de
>
> str dedigimiz zaman 2400 degeri
> *str dedigimiz zaman 2400 un ilk hucresindeki deger aklimiza geliyor.
> Bu konuda sanirim bir problem cekmiyorum.
>
> peki ben 100 degerini elde etmek istiyorsam o zaman
>
> &str kullanmam gerekiyor deil mi? bu konuda hatam var mi?
Oncelikle stack, data, text gibi segmentler bellekte ayri seyler degil.
Yani bunlar dumduz giden, 0 dan baslayip 2 uzeri 32 de biten (i386) RAM
adres space'in bir parcasi. Islemcinin icinde bazi kutukler var. Siz bu
kutuklerle nerenin stack, nerenin code, nerenin data olacagini tespit
ediyorsunuz. Temelde bir den cok kod ve data bolgesi olabilirken stack
uygulamaniz boyunca her zaman tek olur. Yani, sizin programinizin her
yerinde stack ayni adreste/segmentte olurken, stack her zaman ayni
yerdedir. 32 Bitlik bir sistemde segmentasyon virtualdir, yani sizin
kodunuz segmentler degil, duz bir 32 Bitlik adres alani gorur. Bu adres
alanini kendi istedigi gibi stack, data ve kod icin kullanir.
Bir fonksiyonun degiskenlerinin, yani "int a;", "char *b" gibi tarif
edilen degiskenlerinin stack'a konmasinin sebebi, return komutuyla
stack'tan cikilirken orada bulunan geri donus adresi alinmadan once
stack adresinin fonksiyon cagrilmadan onceki orijinal haline donmesidir.
Yani, return komutuyla birlikte, yerel degiskenlerinizin hafizada
kapladigi yer serbest kalir.
Stack ozel bir bellek bolgesidir. Daha cok derleyicinin kullanmasi icin
vardir. Sizin ayirdiginiz bellek bolgeleri her zaman data segmentlerinde
olur.
Simdi sorunuza donelim.
str bir degisken. Bunu aslen birebir bir unsigned int gibi
dusunebilirsiniz. Ama degiskenin icerigi bir sayidan ziyade bir adres
olarak yorumlanir. Tipik bir & operandi, size bir degiskenin adresini
dondurur. Bu bir referanstir, bir pointer degil.
Demekki sizin yonteminiz sizin istediginizi yerine getiriyor.
Saygi ve sevgiler..