Я работал над утилитой, которая разумно использует таблицы, и столкнулся с проблемой:
Страшный предел ~ 2 ГБ памяти для Luajit. Я использую luajit 2.0.5. Я работаю с очень большими плоскими файлами. Я пытался заставить сборщик мусора от lua; он работает, но продолжает расти и в итоге ломается с «нехваткой памяти»
Я исследовал и нашел один из способов обойти это - использовать интерфейс luajit ffi для выделения памяти вне lua управления. Большой! Как именно?
Я провел некоторое исследование и нашел следующую ссылку:
https://www.develcuy.com/en/playing-luajit-ffi
Это фактически показывает, как работать с C библиотека; не совсем то, что я хотел, так как я надеялся выделить память из интерфейса FFI C, чтобы скрипт не сломался.
Я посмотрел немного больше и обнаружил:
Почему память LuaJIT ограничена 1-2 ГБ на 64-битных платформах?
Что выглядит как RaptorJIT и OpenResty Luajit2 есть патчи, чтобы полностью избежать этого. , , , и вдобавок ко всему. , , Похоже, что, возможно, в бета-версии luaJIT она есть.
Итак, вопрос в том, каков самый умный способ преодолеть ограничение в 2 ГБ без перезаписи? Наконец-то у меня есть код, работающий так, как я хочу, и он довольно быстрый и, кажется, не содержит ошибок - ожидайте того досадного ограничения в 2 ГБ, которое я не нашел, пока не протестировал с входным файлом 20 ГБ. :-(