Bu, temel işaretçinin veya yığın işaretçisinin gerçekte yukarı gitmek yerine bellek adreslerini aşağıya taşıdığı anlamına mı geliyor? Neden?
Evet, push
talimatlar yığın işaretçisini azaltır ve yığına yazar pop
, tersini yaparken , yığıntan oku ve yığın işaretçisini arttır.
Bu, sınırlı belleğe sahip makineler için yığının yüksek ve aşağı doğru büyürken, yığının düşük ve yukarı doğru büyütüldüğü için biraz tarihseldir. Yığın ve yığın arasında sadece bir "boş hafıza" boşluğu vardır ve bu boşluk paylaşılır, ya ayrı ayrı ihtiyaç duyulduğunda boşluğa büyüyebilir. Bu nedenle, program yalnızca yığın ve öbek çakıştığında boş bellek kalmayacaksa bellek yetersiz kalır.
Yığın ve yığının her ikisi de aynı yönde büyürse, iki boşluk vardır ve yığın yığının aralığına gerileyemez (bunun tersi de sorunludur).
Başlangıçta, işlemciler için özel yığın işleme talimatları yoktu. Bununla birlikte, donanıma yığın desteği eklendikçe, bu aşağıya doğru büyüyen bu kalıbı üstlendi ve işlemciler bugün hala bu kalıbı takip ediyor.
64 bitlik bir makinede çoklu boşluklara izin vermek için yeterli adres alanı olduğu iddia edilebilir - ve kanıt olarak, bir işlemin birden fazla dişe sahip olması durumunda çoklu boşlukların mutlaka olması gerektiği söylenebilir. Bu, her şeyi değiştirmek için yeterli motivasyon olmasa da, çoklu aralıklı sistemlerde, büyüme yönü tartışmalı olarak keyfidir, bu nedenle gelenek / uyumluluk ölçeği ipuçları verir.
Sen yığını yönünü değiştirmek, ya da başka adanmış iterek & talimatları haşhaş (örn kullanımı vazgeçmek için CPU yığın kullanım talimatlarını değiştirmek zorunda kalacak push
, pop
, call
, ret
, diğerleri).
MIPS komut seti mimarisi adamış etmediğini Not push
& pop
hala tek iplik süreci için tek boşluk bellek düzeni isteyebilirsiniz, ama yukarı yığını büyüyebilir ve yığın - iki yönde yığını büyümeye pratiktir yüzden aşağıya. Ancak, bunu yaptıysanız, bazı C varargs kodlarının kaynakta veya başlık altı parametre geçişinde ayarlanması gerekebilir.
(Aslında, MIPS üzerinde özel bir yığın işleme işlemi olmadığından, yığının dışına çıkarmak için tam tersini kullandığımız sürece yığının üzerine itmek için artım öncesi veya sonrası veya öncesi veya sonrası azalmayı kullanabiliriz. işletim sistemi seçilen yığın kullanım modeline saygı gösterir. Aslında, bazı gömülü sistemler ve bazı eğitim sistemlerinde, MIPS yığını yukarı doğru büyür.)
-4(%rbp)
hiç baz işaretçisi hareket etmez ve bu+4(%rbp)
muhtemelen iş var olamazdı.