Estoy trabajando en una máquina de pila simple escrita en C, principalmente con fines de aprendizaje. Después de usar malloc/free
para mis operaciones de memoria, pensé que sería una buena idea leer algún código específico de asignación de memoria de las máquinas virtuales modernas.¿Cómo manejan las máquinas virtuales modernas la asignación de memoria?
Descargué el código fuente de Lua y comencé a leerlo. Después de un tiempo, me di cuenta de que hay muchas cosas macro implicadas, y no pude encontrar el código donde se realiza la asignación de memoria real (es decir, llamada malloc
).
find . -exec grep -i "malloc" '{}' \; -print
Se imprime sólo algunas macros Lua que tienen malloc
palabra en sus nombres. ¡La Lua VM (y el lenguaje de programación) no usa malloc
en absoluto!
Esto me lleva a la siguiente pregunta: ¿cómo manejan las máquinas virtuales modernas la asignación de memoria? ¿Cómo asigna Lua la memoria del montón? ¿Hay alguna forma de asignación que no sea malloc
? ¿Cuáles son los pros/contras de otros métodos?
También me pregunto acerca de las mejores prácticas, patrones de diseño, etc. para trabajar de forma segura en la memoria asignada. Veo en la fuente de Lua que hay muchos indirectos antes de asignar la memoria. ¿Dónde puedo aprender sobre esto?
¿En qué tipo de máquinas virtuales está interesado? Hay máquinas virtuales que virtualizan computadoras enteras, ya sabes. ¿Estás preguntando sobre esos también? –
@AlexeyFrunze, No, solo me interesan las VM que se usan para lenguajes de programación. – sinan
OK, el título parece confuso. –