Stack Over Flow (Stack Taşması)

Bir ögrencimden gelen soru ve cevabini sizlerle paylasiyorum

 -> Soru : Sonsuz bir döngü içerisinde bir metot çagrimi yapiyorum. CPU kullanimi %100 olmasina ragmen baska bir hata almiyourm. O zaman neden sonsuza kadar kendini çagiran(recursive) bir metot çagrimi yaptigimda belli bir süre sonra “Stack Over Flow” hatasi aliyorum.

-> Cevap : Bir fonksiyon çagrimi yapilmadan önce islemci bir önceki islem ile ilgili bilgileri stack dedigimiz bellek bölgesinde saklar. Böylece metodun icra edilmesi sonlandiginda islemci kaldigi yerden komutlari çalistirmaya devam eder. Sorudaki ilk senaryoda bir metodun çagrilmasi bittikten sonra ayni metot yeniden çagriliyor, dolayisiyla istedigimiz kadar metodu çagiralim bir önceki islemleri tutmak için ayrilan bellek bölgesi her zaman “bir fonksiyon çagrimlik” ekstra bilgiyi tutacaktir. Oysa ikinci senaryoda daha fonksiyonun çalismasi bitmeden siz yeni bir çagrim yapiyorsunuz ve bu durumda mevcut islem daha sonra devam edilmek üzere stack bölgesine atiliyor. Bu boyle sonsuza kadar gittiginde belli bir süre sonra stack dolacak ve bu geri dönülmek üzere saklanan veriler için yer kalmayacaktir. Iste bu tür durumlarda isletim sistemleri “stack over flow” hatasi üretirler.

Leave a Reply

Your email address will not be published. Required fields are marked *


*