İki farklı bellek limiti vardır. Sanal bellek sınırı ve fiziksel bellek sınırı.
Sanal bellek
Sanal bellek, kullanılabilir adres alanı boyutu ve düzeniyle sınırlıdır. Genellikle en başta, çalıştırılabilir kod ve statik veri ve öbek büyüyen geçmiş, sonunda çekirdek tarafından ayrılmış alan, daha önce paylaşılan kütüphaneler ve yığın (çoğu platformda büyür). Bu, yığın ve yığın için büyümek için boş alan sağlar, diğer alanlar işlem başlangıcında bilinir ve sabitlenir.
Boş sanal bellek başlangıçta kullanılabilir olarak işaretlenmez, tahsis sırasında böyle işaretlenir. Öbek kullanılabilir tüm belleğe kadar büyürken, çoğu sistem yığınları otomatik olarak büyütmez. Yığın için IIRC varsayılan sınırı Linux'ta 8MiB ve Windows'ta 1MiB'dir ve her iki sistemde de değiştirilebilir. Sanal bellek ayrıca bellek eşlemeli dosyalar ve donanımlar da içerir.
Yığının otomatik olarak büyütülememesinin bir nedeni, çok iş parçacıklı programların her iş parçacığı için ayrı yığınlara ihtiyaç duymasıdır, bu nedenle sonunda birbirlerinin yoluna girerler.
32 bit platformlarda toplam sanal bellek miktarı 4GiB'dir, hem Linux hem de Windows normalde çekirdek için son 1GiB'yi ayırır ve size en fazla 3GiB adres alanı sağlar. Size tam 4GiB veren hiçbir şey ayırmayan özel bir Linux sürümü vardır. Son 1GiB'nin günü kurtardığı nadir büyük veritabanları için yararlıdır, ancak düzenli kullanım için ek sayfa tablosu yeniden yüklemeleri nedeniyle biraz daha yavaştır.
64 bit platformlarda sanal bellek 64EiB'dir ve bunu düşünmenize gerek yoktur.
Fiziksel hafıza
Fiziksel bellek genellikle yalnızca işletim sistemi tarafından işlemin erişmesi gerektiğinde ayrılır. Bir işlemin ne kadar fiziksel bellek kullandığı belirsiz bir sayıdır, çünkü işlemler (kod, paylaşılan kütüphaneler ve diğer eşlenmiş dosyalar) arasında bir miktar bellek paylaşıldığı için, dosyalardan alınan veriler isteğe bağlı olarak belleğe yüklenir ve bellek sıkıntısı olduğunda atılır ve "anonim" bellek (dosyalar tarafından desteklenmeyen bellek) değiştirilebilir.
Linux'ta fiziksel bellek bittiğinde ne olacağı vm.overcommit_memory
sistem ayarına bağlıdır . Varsayılan değer aşırı taahhüttür. Sistemden bellek ayırmasını istediğinizde, size bazılarını verir, ancak yalnızca sanal belleği ayırır. Belleğe gerçekten eriştiğinizde, tekrar okunabilecek verileri atarak veya bir şeyleri gerektiği gibi değiştirerek kullanmak için bazı fiziksel bellek almaya çalışacaktır. Herhangi bir şeyi serbest bırakamayacağını tespit ederse, süreci varoluştan kaldıracaktır (tepki vermenin bir yolu yoktur, çünkü bu reaksiyon daha fazla bellek gerektirebilir ve bu sonsuz döngüye yol açabilir).
Android'de (aynı zamanda Linux olan) süreçler bu şekilde ölür. Mantık, sürecin ne yaptığına ve kaç yaşında olduğuna bağlı olarak varoluştan hangi sürecin kaldırılacağı mantığı ile geliştirildi . Daha android süreçleri sadece bir şey yapmayı bırak, ama arka planda oturun ve "bellek katil" yenileri için bellek gerektiğinde onları öldürecek.