Çalışma zamanı yığını neden C stili dillerde dinamik bellek ayırma için kullanılıyor ve her ikisi de "yığın" olarak adlandırılan veri yapısı ? Bir ilişki var mı?
Çalışma zamanı yığını neden C stili dillerde dinamik bellek ayırma için kullanılıyor ve her ikisi de "yığın" olarak adlandırılan veri yapısı ? Bir ilişki var mı?
Yanıtlar:
Donald Knuth diyor ki (Bilgisayar Programlama Sanatı, Üçüncü Baskı, Cilt 1, sayfa 435):
Birkaç yazar, 1975 yılında mevcut hafıza havuzunu "yığın" olarak adlandırmaya başladı.
Hangi yazarları belirtmez ve belirli bir makaleye referans vermez, ancak öncelik sıralarıyla ilgili olarak "yığın" teriminin kullanılmasının kelimenin geleneksel duygusu olduğunu söyler.
Aynı isme sahipler ama gerçekten benzer değiller (kavramsal olarak bile). Bir bellek yığınına, bir çamaşır sepetine "çamaşır yığını" dediğiniz gibi bir yığın adı verilir. Bu ad, belleğin istendiği zaman tahsis edilebileceği ve dağıtılabileceği biraz dağınık bir yeri belirtmek için kullanılır. Veri yapısı (referans verdiğiniz Wikipedia bağlantısının işaret ettiği gibi) oldukça farklıdır.
İsim çarpışması talihsiz, ama o kadar gizemli değil. Yığın , yığın, toplama, grup, vb. Anlamına gelen küçük, ortak bir kelimedir. Söz konusu veri yapısı için veri havuzunun adı, tarih havuzunun adından önce gelir (eminim). Aslında, havuz bence ikincisi için çok daha iyi bir seçim olurdu. Yığın , veri yapısına uyan, ancak bellek havuzuna sığmayan dikey bir yapı (yığın gibi) anlamına gelir. Bir bellek havuzu yığınını hiyerarşik olarak düşünmüyoruz, oysa veri yapısının arkasındaki temel fikir en büyük öğeyi yığının (ve alt yığınların) üstünde tutmaktır.
Yığın veri yapısı 60'lı yılların ortalarına kadar uzanır; bellek havuzu, 70'lerin başında yığın. Yığın terimi (bellek havuzu anlamına gelir) en az 1971 gibi erken dönemde Algol tartışmalarında Wijngaarden tarafından kullanılmıştır .
Yığın veri yapısı olarak en erken kullanımı yedi yıl önce
Williams, JWJ 1964'te bulunur. "Algorithm 232 - Heapsort", ACM'nin İletişimi 7 (6): 347-348
Aslında, hafızanın nasıl tahsis edildiğini okumak (bkz. Buddy Blocks ) bana veri yapılarındaki bir yığını hatırlatıyor.
IMO bu tamamen birbiriyle alakasız iki şeyin aynı isme sahip olması bir tesadüf / tesadüf. Grafik ve grafik gibi .
Yığın benzeri veri yapısı, kullanılabilir bellek tahsisini bulma algoritması tarafından kullanılır. Aşağıdakiler http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html adresinden alınmıştır .
Ne zaman
new
çağrılır, bu isteğiniz için boyutuna uyan bir boş bellek bloğu için aramaya başlar. Böyle bir bellek bloğunun bulunduğunu varsayarsak, ayrılmış olarak işaretlenir ve o konuma bir işaretçi döndürülür. Bunu gerçekleştirmek için çeşitli algoritmalar vardır, çünkü nesnenizin boyutundan daha büyük en küçük boş bloğu bulmak için tüm belleği taramak veya belleğin ihtiyaç duyduğu ilk bloğu geri döndürmek arasında bir uzlaşma yapılmalıdır. Bir bellek bloğu alma hızını artırmak için, boş ve ayrılmış bellek alanları, yığın adı verilen ikili ağaçlara benzer bir veri yapısında tutulur.
Konuşma dilleri yığını yığını ve yığın bellek C ++ standardında kullanılmaz. Standart, statik depolama, iş parçacığı depolama, otomatik depolama ve dinamik depolama kullanır.
Standardın Depolama Duraction bölümünde daha fazlası bulunabilir .
Bu nedenle, dil ve standart kütüphane bakış açısından, bir karışıklık yoktur.
S. Öbek nedir? A. Öbek, üst üste yerleştirilen bir nesne koleksiyonudur.
Sorunuzun cevabı: Hem bellek yığını hem de ikili yığın, bildiğinizle aynı kavramı kullanır. Veriler, bellekte bir yığın şeklinde programda yazılanla aynı sırada depolanırken, ikili yığın, verileri bir yığın şeklinde düzenli bir şekilde depolamakla aynı kavramı izleyen bir veri yapısıdır (Üstte veri diğerinin). Yorumlar bölümünde ne düşündüğünüzü bana bildirin.
Belki de uygulanan ilk bellek yığını bir yığın yapısı tarafından yönetiliyordu?