Я работаю над простой стековой машиной, написанной на C, в основном для обучения. После использования malloc/free
для операций с памятью я подумал, что было бы неплохо прочитать некоторый код выделения памяти из современных виртуальных машин.
Я загрузил исходный код Lua и начал его читать. Через некоторое время я понял, что есть много макросов, и я не смог найти код, в котором выполняется реальное выделение памяти (т.е. Вызов malloc
).
find . -exec grep -i "malloc" '{}' \; -print
Он печатал только некоторые макросы Lua, которые имеют malloc
слово в своих именах. Lua VM (и язык программирования) вообще не использует malloc
!
Итак, это приводит меня к вопросу: как современные виртуальные машины обрабатывают выделение памяти? Как Lua выделяет память из кучи? Существуют ли какие-либо способы выделения, кроме malloc
? Каковы плюсы и минусы других методов?
Мне также интересно узнать о лучших практиках, шаблонах проектирования и т.д. для безопасной работы с выделенной памятью. Я вижу в источнике Lua, что перед распределением памяти существует много косвенных ограничений. Где я могу узнать об этом?