os.date() утечка памяти или нет?

Страницы: 1
RSS
os.date() утечка памяти или нет?, при использовании os.date() память потребляемая скриптом растет
 
Добрый день.

Заметил, что при использовании в скриптах функции os.date() память потребляемая скриптом (смотрю в окне Доступные скрипты) растет до определенного предела, через некоторое время память возвращается к первоначальному объему.

Пример скрипта
Код
is_run=true
function main()
  while is_run do
  os.date()
  sleep(100)
  end
end
function OnStop()
  is_run=false
end

Почему подозреваю именно утечку?
1) Память увеличивается при обновлении данных функцией. Пример: os.date("%H%M%S") увеличение потребляемой памяти раз в секунду, os.date("%H%M") тут уже раз в минуту.
2) Проблема именно с данной функцией. Например если вместо os.date() использовать os.time(), то потребляемая память не увеличивается.
3) После определенного предела, память очищается до первоначального состояния. Как будто срабатывает сборщик мусора.


Используемая версия quik 8.9.0.107, на более старых версиях наблюдал такую же картину.
 
Ну а что же удивляет?

Но время работы os.date резервируется буфер в памяти. Когда таких вызовов много, вы можете увидеть изменение занимаемой скриптом памяти даже глазами.

Сборщик мусора все эти огрызки памяти освобождает одним проходом.
www.bot4sale.ru        t.me/bot4sale
 
Цитата
s_mike@rambler.ru написал:
Ну а что же удивляет?

Но время работы os.date резервируется буфер в памяти. Когда таких вызовов много, вы можете увидеть изменение занимаемой скриптом памяти даже глазами.

Сборщик мусора все эти огрызки памяти освобождает одним проходом.
Именно это и удивляет.
То что резервируется буфер в памяти это понятно, непонятно, то что этот буфер функция сама не освобождает после отработки и приходится ждать сборщика мусора.

Если считаете что это нормальная работа функции с памятью, то приведите хотя бы пару примеров таких же "голодных" на память функций в lua.
Я вот единственную такую нашел.
 
Цитата
Алексей написал:
непонятно, то что этот буфер функция сама не освобождает после отработки и приходится ждать сборщика мусора.
Утечкой это нельзя назвать, утечка это когда утекло с концами. В конкретном случае буфер выделяется под строку с отформатированной датой.  Луа отформатировал дату, пытается пихнуть строку на стек, а такая строка  уже есть от прошлого вызова, отсюда периодичность прирастания минутная  или секундная в зависимости от формата. Затем дата поменялась, луа таки засунул новую строку в стек, а старая улетела в мусор и дело за коллектором, когда он там соблаговолит. Еще и поинтересней есть закидоны, коллектор определяет лимит, исходя из занятой памяти, и иногда при медленном нарастании может решить, что вообще все ок и прибираться рановато, и при следующем подходе опять, и так будет постепенно память прирастать, вроде и мусор, а вроде и прибираться перманентно рановато. Дергайте collectgarbage, если напрягает.
Страницы: 1
Читают тему (гостей: 1)
Наверх