В main написал: collectgarbage('stop'), но при присваивании нового значения длинной строке в окне скриптов вижу, как занимаемая этим скриптом память сразу сильно уменьшается. Как это объясняется?
Вы имели в виду, что, когда я длинной строке присваиваю "", то она сразу удаляется (вызывается free()), минуя сборщик мусора, и пересоздаётся (c выделением 56 байтов через malloc())?
Сборщик мусора удаляет не используемые переменные Lua Если же присваивать строку разной длины одной переменной - то разумеется память сразу захватывается/освобождается. Иначе никакой памяти не напасешься
Спасибо, теперь ясно, почему память под скрипт уменьшалась.
А если короткой строке что-то присвоить, то алгоритм сложнее: она, как я заметил, заносится в стринг буфер, и если какой-то строке присваивается короткое значение, то в этом стринг буфере ищется по хэшу такая же строка и, если найдена, оживляется, а если такая строка не находится, то тогда создаётся новая.