Bellek Yığını nedir?


Yanıtlar:


234

Muhtemelen , veri yapısı açısından değil, bellek ayırma açısından yığın anlamına gelir (terimin birden çok anlamı vardır).

Çok basit bir açıklama, yığının , belleğin dinamik olarak ayrılan belleğin (yani ayrılan bellek) bulunduğu kısmıdır malloc. Yığından ayrılan bellek, aşağıdakilerden biri gerçekleşinceye kadar ayrılmış olarak kalır:

  1. Bellek free'd
  2. Program sona erdi

Ayrılan belleğe yapılan tüm başvurular kaybolursa (örneğin artık bir işaretçi saklamıyorsunuz), bellek sızıntısı denen şeye sahipsiniz . Bu, belleğin hala tahsis edildiği yerdir, ancak artık ona erişmenin kolay bir yolu yoktur. Sızan bellek gelecekteki bellek tahsisleri için geri alınamaz, ancak program sona erdiğinde bellek işletim sistemi tarafından boşaltılır.

Bunu, yerel değişkenlerin (bir yöntemde tanımlananlar) yaşadığı yığın bellekle karşılaştırın. Yığına ayrılan bellek genellikle yalnızca işlev geri dönene kadar yaşar (bunun için bazı istisnalar vardır, örneğin statik yerel değişkenler).

Bu makalede yığın hakkında daha fazla bilgi bulabilirsiniz .


3
Yerel değişkenler bir yığın içinde nasıl yaşayabilir? Yığın, her seferinde yalnızca bir değişkeni çok özel bir sırayla almayı sağlar. Yığında daha düşük bir yerden yerel bir değişkene ihtiyacım olursa ne olur?
CodyBugstein

9
@Imray - statik olarak yazılan bir dilde, yerel parametrelerin boyutları derleme zamanında bilinir. Bu nedenle, yerel değişkenlere bir adres ofseti aracılığıyla doğrudan yığından erişilebilir. Bunu yapmak için yığını açmaya gerek yoktur. Daha fazla ayrıntı için bu cevaba bakınız.
LeopardSkinPillBoxHat

17

Bellek yığını , bellekte rasgele erişime tahsis edilebilecek bir konumdur. Belleğin çok tanımlanmış bir sırayla tahsis edildiği ve serbest bırakıldığı yığının
aksine, yığın üzerinde tahsis edilen ayrı veri elemanları tipik olarak birbirinden eşzamansız olan şekillerde salınır. Program, karşılık gelen işaretçiyi açıkça serbest bıraktığında bu tür herhangi bir veri öğesi serbest bırakılır ve bu, parçalanmış bir yığınla sonuçlanabilir. Muhalefette, sadece üst kısımdaki (veya yığının çalışma şekline bağlı olarak alttaki) veriler serbest bırakılabilir, bu da veri elemanının tahsis edildikleri sırayla serbest bırakılmasına neden olur.


9

Yığın, yalnızca belleğin herhangi bir sipariş verilmeksizin tahsis edildiği veya yeniden yerleştirildiği bir alandır. Bu, newoperatör veya benzeri bir şey kullanarak bir nesne oluşturduğunda olur . Bu, belleğin son giren ilk çıkar üzerine yığıldığı yığının tersidir.


8

Bellek yığını, dinamik olarak ayrılmış belleği tutmak için yaygın bir yapıdır. Bkz . Wikipedia'da Dynamic_memory_allocation .

Havuzlar, istifler ve kazıklar gibi başka yapılar da vardır.


7

Bir işlem tarafından kullanılan bellek yöneticisi tarafından işletim sisteminden ayrılan bir bellek yığını. malloc()Et ve diğerlerine yapılan çağrılar , işletim sistemiyle doğrudan uğraşmak yerine bu yığından bellek alır.


7

Muhtemelen bellek yığını demek değil, bellek yığını demek.

Yığın bellek, çalışan programın yığın isteyebileceği büyük bir bellek havuzudur (genellikle işlem başına). Buna tipik olarak dinamik ayırma denir .

"Otomatik değişkenler" in ayrıldığı Yığın'dan farklıdır. Bu nedenle, örneğin, bir C işlevinde bir işaretçi değişkeni tanımladığınızda, yığın üzerinde bir bellek adresini tutmak için yeterli alan ayrılır. Ancak, genellikle yığın üzerinde dinamik olarak boşluk (malloc ile) ayırmanız ve daha sonra bu bellek yığınının işaretçiye başladığı adresi vermeniz gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.