Размер стека

Страницы: 1
RSS
Размер стека
 
Ув. разработчики.

Каков размер стека в реализации qlua?

Можете ли предложить способы увеличения  размера стека ?

Спасибо.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
А разве это не верно:
Для получения размера стека используйте функцию lua_checkstack.  
Для вызова из Lua кода на C необходимо иметь в наличии свободной памяти по крайней мере на LUA_MINSTACK  позиций стека.
LUA_MINSTACK по умолчанию равно 20.
Если размера стека не хватает, его можно увеличить функцией lua_checkstack.
 
Николай, в моем понимании, апишный стек и стек среды lua - это вещи разные.

lua_checkstack изменяет размер области обмена в случае вызова апишных функций и только. На исполнение натив луа кода эта функция никак не влияет.

Меня же интересует, в частности, вложенность натив луа функций, в том числе рекурсии. Рекурсия в 20 уровней - это слишком грустно.

Если я ошибаюсь в своих воззрениях - буду рад ошибиться.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Оказывается, Lua содержит оптимизатор хвостовой рекурсии, так что при некотором умственном напряжении в вопросе рекурсии можно найти выход.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
полагаю, что число рекурсий ограничено лишь объемом свободной памяти кучи .
 
Вызов в форме return functioncall называется концевым вызовом. Lua также поддерживает концевой вызов «себя»  (или рекурсивный концевой вызов): в этом случае вызванная функция использует стек вызывающей функции.
Поэтому количество вложенных концовых вызовов может быть любым. Заметим только, что концевой вызов стирает отладочную информацию о вызывающей функции.
 
Цитата
s_mike@rambler.ru написал:
Каков размер стека в реализации qlua?
8000

Еще можно почитать информацию по ссылке
http://www.lua.org/manual/5.0/manual.html#3.2
 
Цитата
Sergey Gorokhov написал:

Еще можно почитать информацию по ссылке
http://www.lua.org/manual/5.0/manual.html#3.2
Lua uses a virtual stack to pass values to and from C. Это дела С API.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Меня же интересует, в частности, вложенность натив луа функций, в том числе рекурсии. Рекурсия в 20 уровней - это слишком грустно.
То, что LUA_MINSTACK = 20 ничего не значит, т.к. LUA_MINSTACK - это минимальный выделенный размер стека Lua на момент вызова пользовательской Си-функции.

Цитата
Sergey Gorokhov написал:
8000
Не совсем.

Согласно https://www.lua.org/source/5.0/llimits.h.html
Количество вложенных в друг друга функций (и Си-функций и Lua-функций) в Lua - это LUA_MAXCALLS = 4096, из них может быть только LUA_MAXCCALLS = 200 вызовов пользовательских Си-функций (всякие SearchItems и т.п.)
 
Цитата
Вячеслав + написал:
LUA_MAXCALLS
не совсем то, так как QLUA на основе Lua 5.1 в которой
/* @@ LUAI_MAXCALLS limits the number of nested calls. ** CHANGE it if you need really deep recursive calls. This limit is ** arbitrary; its only purpose is to stop infinite recursion before ** exhausting memory. */
#define LUAI_MAXCALLS   20000
/* @@ LUAI_MAXCSTACK limits the number of Lua stack slots that a C function @* can use. ** CHANGE it if you need lots of (Lua) stack space for your C ** functions. This limit is arbitrary; its only purpose is to stop C ** functions to consume unlimited stack space. (must be smaller than ** -LUA_REGISTRYINDEX) */
#define LUAI_MAXCSTACK  8000
Страницы: 1
Читают тему
Наверх