когда создаешь table https://github.com/lua/lua/blob/master/lapi.c#L769 через функцию luaH_resize https://github.com/lua/lua/blob/master/ltable.c#L560
На синтетике у меня так и не получилось. В рабочем коде время от времени кидается эта ошибка.
когда создаёшь table? Ты уверен, что не от наполнеия таблицы дофигаллионом элементов?
Это разве не называется переполнение?
стоп... там же 32 битное число для размера таблицы, да? 😂 перепутал, ща переделаю
крч да, это работает. Ищи ошибку на стороне CAPI, или на добавлении в таблицу большого количества элементов.
А как подчищать после lua_createtable ? Там разве не каждый раз новая таблица создается ?
Новая. Этим занимается сборщик мусора.
А откуда тогда overflow возникает ?
А, до выхода из функции?
объясняю : си функция cc() создаёт таблицу и помещает её на стек (пытается). Если она её и поместит туда, она возвращает НОЛЬ аргументов, return 0, и таблица, если она была создана, остаётся ожидать пока её соберёт сборщик. В случае с OOM, икакой таблицы, по итогу, и не помещается на стек. (объект тадицы это сам GcObject и привязанные к нему array и hash массивы указателей на GcObject'ы. В любом случае, всё соберётся без проблем). Я даже после каждого вызова делаю collectgarbage, чтобы точно собрать ВСЁ что было созданео, и чтобы ничего не влияло на резщультат на столько, на сколько возможно в этом примере
🤦♂️ это TABLE overflow, НЕ STACK OVERFLOW!!!
Обсуждают сегодня