C dilinde yazılmış basit bir yığın makinesi üzerinde çalışıyorum, çoğunlukla öğrenme amaçlı. Bellek işlemleri için malloc/free
kullandıktan sonra, modern sanal makinelerden bazı bellek ayırma özel kodlarını okumak iyi bir fikir olacağını düşündüm.Modern VM'ler bellek ayırmayı nasıl ele alıyor?
Lua kaynak kodunu indirdim ve okumaya başladım. Bir süre sonra, çok fazla makro şey olduğunu anladım ve gerçek bellek ayırmanın yapıldığı kodu bulamadım (örneğin, malloc
çağrısı).
find . -exec grep -i "malloc" '{}' \; -print
Bu adlarında malloc
kelime var sadece bazı Lua makro baskılı. Lua VM (ve programlama dili) hiç malloc
kullanmaz!
Bu bana şu soruya yöneliyor: modern VM'ler bellek ayırmayı nasıl ele alıyor? Lua belleği bellekten nasıl ayırıyor? malloc
'dan başka herhangi bir ayırma yolu var mı? Diğer yöntemlerin artıları/eksileri nelerdir?
Ayrıca, ayrılmış bellek üzerinde güvenli bir şekilde çalışmak için en iyi uygulamaları, tasarım kalıplarını, vb. Merak ediyorum. Lua'nın kaynağında, bellek ayırmadan önce çok fazla dolaylı kaynak olduğunu görüyorum. Bu şeyleri nereden öğrenebilirim? Kesinlikle Lua VM tabanlı dillerin% 99 gibi bir GC kullanması nedeniyle, ancak, (bir de çok özel bir ayırıcısı geçebilir) realloc
şeklinde, malloc
kullandığı en
Ne tür bir VM'lerle ilgileniyorsunuz? Tüm bilgisayarları sanallaştıran sanal makineler var, biliyorsun. Bunları da soruyor musun? –
@AlexeyFrunze, Hayır, sadece programlama dilleri için kullanılan VM'lerle ilgileniyorum. – sinan
Tamam, başlık kafa karıştırıcı görünüyor. –