Отключил сборку мусора, а его всё равно кто-то собирает...

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

А если короткой строке что-то присвоить, то алгоритм сложнее: она, как я заметил, заносится в стринг буфер, и если какой-то строке присваивается короткое значение, то в этом стринг буфере ищется по хэшу такая же строка и, если найдена, оживляется, а если такая строка не находится, то тогда создаётся новая.
Страницы: 1
Читают тему
Наверх