Static Variable
-
Yaw millet c/c++ biraz bilenles şu sitatic variable ne olduğunu bilirler... hani şu değerini "aklında" tutan variable...
Benim merak ettiğin şu compiler yada program herneyse nası oluyorda static variableın tanımlandığı line ilk defasında çalıştırdıktan sonraki lerde atlıyor... Yani beyni yokki haıtlasın ilk defamı diye... Hocaya sordum yaw hocam dedim memori falan mı var orayamı atıyo dedim? yok dedi... Peki özel bi karaktermi atıyo o line ın başına dedim hayır? dedi peki ne dedim.. oda git araştır bi soraki derse öğrenmezsen not kıracam dedi... İpne sinir etti beni ya... o kadar yere baktım bulamadım buraya geldim belki bilen biri vardır... Yaw Holy sen biliyosundur,sende merak edersin böle acaib şeyleri... -
holy abi bu soruyu şöyle cevapladı :
HolyOne : memorye yazio
SySTemOfaDowN : hocası yok demiş
HolyOne : strsin
SySTemOfaDowN : ahuaha
HolyOne : allahütaladan inio desin o zaman hoja sorarsa, cenabi hak oole yaratmis ondan desin
HolyOne : abü memoride kalio iste nerde kalcak baska
complier bi adres atiyo ona
umarım yardımcı olabilmişisdir :)) -
Abi Bu hojaların topu piskopat dert etme sen, adam static komutunun memoryde ne sekilde ne farkla tutuldugunu bilse zaten o okulda durmaz...
bilmiom demeyide malesef birçok hojamız eziklik saydığından ya sıkarlar yada böle abzürt bi cewap verirler.
Türkiede bu bole abi, eger memoryde ne çeşit bi farkla atandığını merak ediyosan ne kadar araştırsan hiçbi yerde bulamazsın, iki boş proram yaz, birinde bi variable i static tanımla diğerinde obur turlu tanimla sora Windiff diye bişey gelir Visual Studio da onu kullanarak iki exe arasındaki farkı öğrenirsin.
bu sana ikisinin arasındaki farkı anlatacaktır.
sen anlayamadıysan hojanın cevabını da ben sana tercüme ediyim: bana ole her aklına geleni sorma, sakata gelirsin demek istemiş. -
:))) Demek sadece bizim hocalar böle salak,ve eziq değilmiş :) Neyse ben soruyu biraz yamultarak sormuşum tam olarak neye kafayı taktığımı anlatamamışım galiba... Şimdi static bi değer yaratında yani o değer memoryde tutuluyo zaten bunun şüpe götürür bi yanı yok, başka yerde tutamazki alat yaw nereye sokacak başka :))) Benim tam olarak merak ettiğim şu şimdi bi for loopun içinde (türkçesi for döngüsü :)) şunu yazdık "static int a=6;" sora o line ın altında print aldık sorada "a++;" yazdık fordan çıktık... Output aldığımızda a=6,a=7,a=8.. böle gidiyo yani ilk for dönüşünde"static int a=6;" yı yapıyo sorakilerde atlıyo... Hah bunu merak ediyom işte ilk seferi olduğunu nası anlıyo, ve sorakilerde nası atlıyo... Bu arada "a=6" yazmadığımızda direk 0 (sıfır) atıyo, ve 1,2,3,4... diye veriyo outputu... Hah işte buna benim teorim static gördüğü yerde ya programcının değeri okuyo,yazıyo, eğer değer yoksa 0 yazıyo ve o line ın başına özel bi karakter atıyo ve takrar geldiğinde direk atlıyo ama biraz attım gibi geliyo bana... bu işin aslını bilen varsa anlatsın çatlıycam.... Ve şunu söliim bizim hocaların hiçbiri kesinlikle bunu bilmiyo !
-
Evet... Uzun bir aradan sonra olayın aslını öğrendim gelip sizlerle paylaşayım dedim...
Evet beyler... Compiler "static" kelimesini gördüğü anda processorun registerlerinden biri bu variable için ayırıyo ve eğer "static int a=1" derseniz oraya 1 i atıyo... eğer "static int a" derseniz processorun resigterina direk 0 atıyo ve yaptığınız her değişiklik yine orda tutuluyo...
Yani yani diğer variablelar gibi tam olarak memoryde yer tutmuyolar özel olaraktan processor registerinde tutuluyo beyfendiler ama sonuçta oda memeory değil mi ? :)
SAYGILAR.. -
zaten kendin cevabladin
cpu yazmaclarinin birer memory oldugunu,
registerler yani ismindende anlasilacagi gibi kaydediciler
Belirli hafiza hücreleridir.16 Bit'liktir.Yazmaçlarda,mikroislemci içindeki aritmetiksel,matematiksel islemler ve adresleme olaylari tutulur..asm bilenler bilir -
güzel yaklaşım, önce static in ne olduuunu açıkliyim,
1) eğer C++ da bir classi static tanimlarsanız bundan bir tane yaratırsınız ikinci kopyasını yaratamazsınız,yada yarattığınızda birini değiştirirseniz öbüründede aynı değişiklik olacaktır.
static olarak tanımlanan tek şey integer değildir.
onlarca MB arraylaride static tanımlayabilirsin.
Peki bukadar büyük verileri cpunun hangi registeri aliyomus onuda ogren :) CPUların kralinda bile register sayisi sınırlıdır.
o zaman bir kere de en çok 8-10 static mi tanimliabilion bilgisayarda? dene bakalim static tanimlamada bi sınır warmı ? :)
Toplam Hit: 3027 Toplam Mesaj: 7
