SORU
10 Temmuz 2010, CUMARTESİ


Neden hala bir yığın sorun taşıyor.

Bu soru beni yıllardır gizemli ve bu sitenin adı göz önüne alındığında, bu sormak için bir yerdir.

Neden, programcılar, hala StackOverflow bu sorun var mı?

Neden her büyük dilde parçacığı yığın bellek statik iş parçacığı oluşturma ayrılacak olan var mı?

Onları en çok kullandığım için C kapsamında#/Java konuşacağım, ama bu muhtemelen daha geniş bir sorundur.

Sabit boyutu çok büyük sorunlara yol açar yığını:

  • Özyineleme derinliği küçük olduğundan kesinlikle emin olmadıkça özyinelemeli bir algoritma yazmak için bir yolu yoktur. Özyineli algoritma doğrusal bellek karmaşıklığı genellikle kabul edilemez.
  • Yeni bir iş parçacığı başlatmak için ucuz bir yolu yoktur. Yığın iş parçacığı tüm olası kullanımlar için hesap için büyük bellek bloğu ayırmak zorunda.
  • Eğer çok derin özyineleme kullanmasanız bile, hep yığın boyutu keyfi sabit bir sayı olduğu için yığın alanı dışı eden bir risk var. Bu StackOverflow genellikle kurtarılamaz olduğunu düşünürsek, bu benim gözümde büyük bir sorundur.

Şimdi yığın dinamik olarak yeniden boyutlandırılabilir oldu, yığın taşması nedeniyle çok hafifletti, olur yukarıdaki tüm sorunları tek bir bellek taşması olduğunda mümkün olur.

Ama henüz bu durumda değil. Neden? Verimsiz/imkansız hale getiren modern İşlemciler bazı temel sınırlamalar vardır? Eğer ilgili performans adetle sınırla uygulayacak olan hit düşünüyorsan, insanlar acı çekmeden ArrayList Her zaman gibi yapıları kullanmak için kabul edilebilir olmalıdır.

Yani, soru şu, ben bir şey eksik veStackOverflowsorun değil, ya da bir şeyler eksik ve dilleri var mıyım dinamik yığın, ya da var olmak için büyük bir neden imkansız/uygulamak zor mu?

Düzenleme: Bazı insanlar bu performansı büyük bir sorun olacağını söyledi, ama bu göz önünde bulundurun:

  • Derlenmiş kod dokunmadan terk ediyoruz. Yığın erişim aynı, böylece kalır "" performans aynı kalır. her zamanki durum
  • Kodu ayrılmamış bellek erişimi ve "geri ödeme" rutin. bizim başlatmak için çalıştığında olur CPU istisna kullanacağımızı Adetle sınırla çünkü sık < olmayacak;her zamanki ArrayList argüman burada>. En korumalı mod çalışması performans kaybı olmadan CPU gerekir. Hayır mı?

CEVAP
10 Temmuz 2010, CUMARTESİ


Asla yığın taşması bizzat karşılaştımdeğildisonsuz özyineleme neden. Bu gibi durumlarda, bir dinamik boyutu, biraz daha yetersiz bellek sürer yardımcı olmaz yığını.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alexander Johnson

    Alexander Jo

    26 Temmuz 2008
  • AllYourNewsByMe

    AllYourNewsB

    18 Temmuz 2011
  • Titan Lee Hai

    Titan Lee Ha

    14 Temmuz 2008