Her .NET kitabı, referans türlerine kıyasla değer türlerinden bahsediyor gibi görünüyor ve her türün depolandığı (yığın veya yığın) (genellikle yanlış) durumuna işaret ediyor. Genellikle ilk birkaç bölümde yer almaktadır ve bazı önemli hususlar olarak sunulmuştur.
Tamamen katılıyorum; Bunu her zaman görüyorum.
.NET kitapları neden yığın bellek yığın bellek ayırma hakkında konuşuyor?
Sebeplerin bir kısmı, birçok insanın C # (veya diğer .NET dillerine) bir C veya C ++ geçmişinden gelmesidir. Bu diller sizin için depolama ömrü hakkındaki kuralları uygulamaz, bu kuralları bilmek ve onları takip etmek için programınızı dikkatle uygulamak zorundasınız.
Şimdi, bu kuralları bilmek ve bunları C içinde takip etmek, "yığın" ve "yığın" ı anlamanızı gerektirmez . Ancak veri yapılarının nasıl çalıştığını anlarsanız, kuralları anlamak ve bunlara uymak genellikle daha kolaydır.
Bir acemi kitabı yazarken bir yazar aynı sırayla kavramları açıklamak için doğaldır onlar bunları öğrendik. Bu mutlaka kullanıcı için anlamlı olan bir düzen değildir. Son zamanlarda Scott Dorman'ın C # 4 başlangıç kitabının teknik editörüydüm ve bu konuda hoşuma giden şeylerden biri, Scott'ın bellek yönetiminde oldukça gelişmiş konuların ne olduğuna başlamaktan ziyade, konular için oldukça mantıklı bir sipariş seçti.
Bunun bir başka nedeni de MSDN dokümantasyonundaki bazı sayfaların depolama ile ilgili hususları kuvvetle vurgulamasıdır. Özellikle ilk günlerde hala asılı olan eski MSDN belgeleri. Bu belgelerin çoğunun, hiçbir zaman eksize edilmeyen ince hataları vardır ve tarihte ve belirli bir kitleye belirli bir zamanda yazıldığını hatırlamanız gerekir.
Neden yığın vs yığın (acemi) .NET geliştiricileri için bile önemlidir?
Bence öyle değil. Anlamak çok daha önemli olan şey şöyle şeylerdir:
- Referans türü ve değer tipi arasındaki kopya anlambilimindeki fark nedir?
- "Ref int x" parametresi nasıl davranır?
- Değer türleri neden değişmez olmalıdır?
Ve bunun gibi.
Bir şeyler tahsis ediyorsun ve işe yarıyor, değil mi?
Bu ideal.
Şimdi, önemli olduğu durumlar var. Çöp toplama işlemi harika ve nispeten ucuz, ancak ücretsiz değil. Küçük yapıların etrafına kopyalanması nispeten ucuzdur, ancak ücretsiz değildir. Toplama baskısının maliyetini aşırı kopyalama maliyetiyle dengelemeniz gereken gerçekçi performans senaryoları vardır. Bu gibi durumlarda, ilgili tüm belleğin boyutu, yeri ve gerçek kullanım ömrü hakkında güçlü bir anlayışa sahip olmak çok yararlıdır.
Benzer şekilde, yığında ne olduğunu ve yığında ne olduğunu ve çöp toplayıcısının etrafında neler hareket edebileceğini bilmek için gerekli olan birlikte çalışma senaryoları da vardır. Bu nedenle C #, "sabit", "stackalloc" gibi özelliklere sahiptir.
Ancak bunların hepsi gelişmiş senaryolardır. İdeal olarak, yeni başlayan bir programcının bunların hiçbiri için endişelenmemesi gerekir.