Serge123 (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 6 7 8 9 След.
Окно сообщений перехватывает фокус ввода
 
Иногда надо быстро набрать в стакане в поле Q количество акций для заявки, а в это время выскакивает окно сообщений и приходится щёлкать по полю ввода для возврата фокуса. Это нервирует и способствует ошибкам. Можно сделать так, чтобы при появлении этого окна фокус ввода возвращался на прежнее место. Насколько я знаю, Win API возвращает хендл окна, у которого был отнят фокус ввода.
dll на C: удивительная ошибка...
 
Вроде бы разобрался: в 1-й строчке скрипта надо было правильно записать package.cpath = ...
dll на C: удивительная ошибка...
 
Похоже, нашёл причину (но могут быть и другие): если моя dll имеет, к примеру, имя aaa.dll (тогда в скрипте, который её использует, будет require('aaa')) и если интерпретатор lua найдёт в папках из global variable LUA_PATH или из environment variable LUA_PATH файл aaa.lua, то интерпретатор загрузит его вместо aaa.dll, отсюда, видимо, и возникает "C stack overflow". А я давал этой dll и скрипту одинаковое имя!  :sad: Тогда, получается, выполняя этот require, интерпретптор не загружал ничего или повторно загружал мой скрипт типа aaa.lua?  https://www.lua.org/pil/8.1.html

Почему же в require нельзя задавать расширение файла, чтобы не было путаницы? :what:  
dll на C: удивительная ошибка...
 
А сейчас что бы я ни делал, 1-й раз после запуска Квика мой скрипт отрабатывает (есть звук), а при последующих вызовах "C stack overflow". Но стоит в скрипте вместо моей dll вставить require("w32") и всё работает, хоть 10 раз вызывай звук - всё нормально! Причём, каких-то принципиальных отличий в моём исходнике С от luaw32.c от swerg нет! :shock:  
dll на C: удивительная ошибка...
 
Выхожу из Квика, удаляю tmsg.dat, запускаю Квик, запускаю свой скрипт: работает, выдает звук. При следующих запусках этого скрипта возникает "C stack oferflow"... Кстати, в этом меню видел уже другую левую иконку на другом месте (см. аттач).
dll на C: удивительная ошибка...
 
Попробую удалить файл tmsg.dat, куда зачем-то записываются имена скриптов и текст ошибок ("C stack overflow"), может, после этого перестанут появляться эти дурацкие иконки...
dll на C: удивительная ошибка...
 
Да, и как раньше: стОит закрыть это меню с левой (левыми) иконкой и опять открыть, "ан демонов-то и нету!" (С)
Прямо, как в песнях от Ларисы Мондрус и Нины Бродской: "Вот она была и нету!!!" (С)
https://www.youtube.com/watch?v=szaIkbW0tH8
https://www.youtube.com/watch?v=wnvFAE3RFLw
dll на C: удивительная ошибка...
 
Сейчас вышел из Квика, подождал, опять вошёл и сразу же в меню "Сервисы" увидел левую иконку напротив "Скрипты" (см. аттач). А с час назад я видел напротив "Скрипты" другую левую иконку: с буквой i (как в окне с информацией). И это на том Квике, который я сегодня вечером скачал и установил!

Кто-то может объяснить эти особенности этой чудесной программы? Там в Квике юзерам молоко за вредность дают?  :what:  
dll на C: удивительная ошибка...
 
Кстати, после ошибки "C stack overflow" опять иногда в выпадающих меню стали возникать посторонние иконки.

Методом тыка выяснил, что, если перед переименованием и перекомпиляцией моей dll, выйти из Квика, а после переделки моих программ опять в него войти, то ошибка "C stack overflow" не возникает при переименовании dll на те имена, когда эта ошибка возникала раньше, когда я при этом из Квика не выходил.

Т.е. получается, что если запустить мой скрипт с dll, а потом при запущенном Квике переименовать эту dll и изменить это имя в луа скрипте, то при запуске этого скрипта возникает ошибка "C stack overflow". И потом даже если перезапустить Квик, эта ошибка всё равно возникает, пока из него не выйдешь и не переименуешь dll, тогда эта dll под другим именем уже работает. Похоже, dll, загруженная моим скриптом, после его завершения, остаётся в памяти процесса Квика и это вызывает ошибку при повторном старте этого скрипта, который вызывает аналогичную dll с другим именем. Да ещё иконки иногда начинают меняться также при последующих сеансах работы Квика. О такой маразматической ошибке Квика мне бы и в кошмарном сне не приснилось...
dll на C: удивительная ошибка...
 
Вернее, лампа стоит сзади и тень от головы и от рук на клавиатуру падает...
dll на C: удивительная ошибка...
 
Пардон, свет от лампы на клавиатуру падает, не туда нажимаю. Вместо
"одовил до посленей версии, переписал dat, ihi"
должно было быть
"обновил до посленей версии, переписал dat, ini".
dll на C: удивительная ошибка...
 
Сегодня скачал с сервера брокера Квик, установил его и одовил до посленей версии, переписал dat, ihi, wnd файлы и файлы с ключами из того, что было, попробовал этот пример, о котором писал здесь в 1-м сообщении - всё повторилось то же самое с ошибкой при имени mydll.dll и отсутствии ошибок при luacdll.dll.

Я сравнил содержимое exe и dll файлов новой копии Квика и той, на которой работал ещё в черверг, - они не отличаются. Поэтому непонятно, отчего у меня в выпадающих меню иногда рисовались левые иконки...
dll на C: удивительная ошибка...
 
Так я же написал, что наличие или отсутствие ошибки "C stack overflow" определяется исключительно именем dll: если назвать её mydll.dll, то эта ошибка возникает, а если назвать её, скажем, luacdll.dll, то она работает и выдаёт звуки.
Могу закачать исходники, если кому интересно проверить у себя, но там надо транслировать через gcc.exe:
gcc.exe mydll.c -o mydll.dll -mdll -O2 -s -L. -llua54 -m64 -std=c17
dll на C: удивительная ошибка...
 
Хм, может быть, тут дело в gcc.exe? Кому не нравится имя mydll.dll??
dll на C: удивительная ошибка...
 
У меня на диске валялся другой (старый, вер 8.9) Квик (от банка РСХБ), которым я не пользовался, я в него залогинился, он обновился, но почему-то не до 11-й, а до 10-й версии. Я в нём проверил эту dll, и в нём повторилось то же самое: mydll.dll вызывала "C stack overflow", а такая же luacdll.dll работала. Поэтому версия, что дело тут в обновлении Квика, сомнительная...
dll на C: удивительная ошибка...
 
Забыл добавить, что внутри luacdll.c и mydll.lua я везде "mydll" тоже поменял на "luacdll".
dll на C: удивительная ошибка...
 
На основе w32.dll сделал на C маленькую mydll.dll для проигрывания звуков MessageBeep и mciSendString. Она работала, но через некоторое время перестала и при запуске соотв. Lua скрипта выдавалось сообщение "C stack overflow". Я 2 дня по-разному менял код, но это сообщение оставалось. Похоже, что эта ошибка стала появляться после очередного обновления Квика, т.к. кроме этого всё оставалось тем же со времени, когда mydll.dll работала. Остальные мои аналогичные dll продолжают работать. Только что методом тыка я поменял имя dll с mydll.c на такое же моё имя, что работает: на luacdll.c (luacdll.dll). И эта dll стала работать. От одного только переименования файла!

Как это можно объяснить??
Получить всю таблицу целиком, Получить всю таблицу целиком без цикла
 
Хм, движок форума съел у меня один доллар... В коде в предыдущем сообщении перед переменной a должно стоять целых два доллара.
Получить всю таблицу целиком, Получить всю таблицу целиком без цикла
 
Кстати, возникло любопытство: как в SearchItems по именам переменных, заданных в строке, получают сами эти переменные?

В последнем (необязательном) параметре SearchItems получает строку вида 'flags, price, sec_code', а пользовательская функция, которую вызывает SearchItems для фильтрации записей из таблицы, получает уже сами эти переменные:
local function fn(flags, price, sec_code). Как я понял, Lua не Perl, который был гениальной задумкой Larry Wall: в Перле a - имя переменной, $ - оператор разыменования, который по имени переменной выдаёт её значение. Поэтому, если $a = 'b', то $$a это то же, что и $b:
Код
$a = 'b';
$b = 'bbb';
print "$$a\n"; # выводит строку bbb
Если в Lua действовать полным перебором типа "если в строке имя переменной 'flags', то берём переменную flags и т.п." Получится очень большой перебор, особенно, если иметь в виду, что в этой строке для SearchItems можно указывать поля вложенных таблиц, напр., 'datetime.hour'.

Кто тут глубокий копатель Lua, который может это объяснить?
По поводу текущей паники в акциях
 
Случайно так получилось, что в начале торгов я быстро всё продал по хорошей цене, а она после этого быстро опустилась на 3 пункта и, похоже, на этом устаканилась. Хотя, вчера поздно вечером покупатели поддавливали. Да, не совсем оправдалось предположение автора канала "Профита нет"...
Получить всю таблицу целиком, Получить всю таблицу целиком без цикла
 
Мне кажется, что быстрее, чем через SearchItems (найти все записи) и потом крутить в цикле с getItem, не получится.
По поводу текущей паники в акциях
 
Насколько я понял, акции, которые не связаны с долларом, продавать не стоит?

Автор Ютюб канала "Профита нет" часа два назад сказал, что в такое время очень хорошо перекладываться в фонды ликвидности, но я сейчас вижу, что там тоже много продают, и началось это с вечерней сессии. Не стоит обращать на это внимание, или тоже выйти в кэш?
Как исправить ошибки после зависания?
 
Кстати, какие ещё файлы кроме *.wnd и *.txk надо сохранить при перезаписи Квика?
Как исправить ошибки после зависания?
 
Как я уже сказал, ошибка, скорее всего, в порче файлов в результате зависания Квика. По причине моей ошибки в длл на си, которую я исправил.

Мой скрипт, который работал, когда был сделан скриншот, не использует длл, он работал и до появления этих иконок.

Похоже, никто ничего не посоветует, т.к. не сталкивался с такой ошибочной экзотикой. Собираюсь на досуге переставить Квик.
Как исправить ошибки после зависания?
 
Сейчас поймал момент, о котором писал в этой ветке в сообщении #2, чтобы показать что-то конкретное, и сделал копию экрана.

Это случается нечасто, как правило, сразу после запуска Квика. Если закрыть это меню с посторонними картинками и тут же его открыть, то этих картинок уже нет! Иногда такие посторонние иконки бывают в начале всех строк меню и они большие, в результате чего расстояние между строками меню увеличивается. Например, я как-то во всех строках видел иконку Квика с большой буквой Q, причём она была чёрная, как будто это была маска для этой иконки, как делается в граф. редакторах.

Как я писал выше, это стало происходить после того, как мой скрипт на Lua вызывал зависания Квика и после какого-то ожидания отклика от программы приходилось снимать его с выполнения. После этого в одном wnd файле во вкладке с графиками количество тикеров в списке стало меньше, чем было до этого, при этом Квик с загруженным этим файлом работал. Я восстановил этот wnd файл из его копии, в которой количество тикеров было больше.

С тех пор прошло одно обновление Квика, но проблема осталась. Квик работает. Памяти, как показывает окно "Диспетчер задач/Производительность", расходуется примерно столько же, что и до этого зависания, хотя и многовато: ~ 44% из 8 Гб, которые установлены на этом безвентиляторном мини ПК с алиэкспресс. Мне этот ПК понравился: энергии ест мало, а ЦП даже понимает AVX2.

Пока я не пытался переустанавливать Квик, чтобы не случилось дополнительных проблем с его работоспособностью, хотя, собираюсь это сделать. Похоже, что-то подпортилось в какой-то программе или файле данных.

Вот кусок скриншота, на котором виден голубой бублик от микрософта, он рисуется на экране около курсора, когда у программы, похоже, переполняется очередь сообщений. Я как-то даже видел в меню Квика ошибочную иконку с изображением экранного курсора. Т.е. в меню Квика откуда-то попадают кусочки от изображений на экране.

Было ли у кого-то подобное явление? Какие будут конкретные предположения о его причине?
? к разработчикам: тайные архивы
 
Случайно нашёл ссылку https://arqatech.com/upload/Public/quik_lua.zip
Внутри этого архива в папке examples лежат старючие примеры lua программ. Внутри аналогичного архива, который можно скачать со стр.https://arqatech.com/ru/support/files/ папки examples нет. Что это значит: эти примеры устарели, или засекречены, или теперь только за деньги?

Почему не дают доступ к папке arqatech.com/upload/Public/ ? Может быть, оттуда можно ещё что-то полезное накачать? Тут говорилось о примерах торговых программ "от арки", как их можно бесплатно скачать?

To All: и вообще, где можно надыбать нормальные примеры торговых программ, а не всякий хлам? На сайте брокера БКС я видел статьи о создании таких программ, но ссылки на тексты этих программ не работают. Может быть, кто-то скачивал эти тексты или знает, как их найти в архиве Интернета?
Как в скрипте получить количество рублей на счёте?
 
Спасибо, а я уже начал смотреть
getItem('money_limits', i)
и аналогичные таблицы. И не понял, почему таблицы account_balance и account_positions пустые...
Как в скрипте получить количество рублей на счёте?
 
В Квике я вижу это в таблице "Состояние счёта" в строке "Российский рубль", столбец "Позиция", сверху "На дату Tx".
И где можно посмотреть имена подобных параметров, которые надо задавать в скрипте для их чтения?
attempt to index a nil value, При переборе циклом for выдвет ошибку attempt to index a nil value
 
А ошибка в строке
local order_info = getItem("orders", f) ?
Такое впечатление, что во время работы цикла колич. ордеров уменьшается.
Проверяйте ордера на ниль и выведите на печать число ордеров и номер ордера, который ниль.
В чём причина приостановки торгов по фонд. рынку на Мосбирже 13.02 и 14.02?
 
Интересно, что во время этого перерыва изредка менялись циферки в стаканах котировок...
В чём причина приостановки торгов по фонд. рынку на Мосбирже 13.02 и 14.02?
 
Сегодня видел, как с 10:35 по 11:35 был перерыв, сейчас вижу, что за мин. свечой от 10:35 идёт свеча от 11:35. Я cначала подумал, что Москвы уже нет... Техподдержка брокера ответила, что вчера тоже был перерыв, после которого стаканы очистились, а Мосбиржа ни вчера ни сегодня не назвала причину перерывов. Сегодня стаканы не очищались.

Кто знает, в чём причина? Интересно, чтО надо предусмотреть в скриптах в связи с такими явлениями? Наверно, скрипт должен мониторить что-то часто меняющееся (напр., IMOEX2), чтобы не наделать ошибок?
Какими заявками крупный игрок накапливает позицию?
 
Цитата
nikolz написал:
Поэтому когда крупный игрок приходит за товаром, то он не смотрит по сторонам.
Кто сидит в "яме", тот это видит.
А буратинам потом рассказывают как круто вчера рынок двигался и можно легко огребать бабло.  
Эти образные выражения я что-то не совсем понял...
как узнать количество транзакций?
 
Цитата
paluke написал:
Тут выше уже отвечали, что часть ошибок при выставлении заявки - от сервера брокера.
Возможно, это был пост, когда я ошибался в причинах появления ошибочных сообщений. Я в скрипте в OnTransReply выводил только trans_reply.trans_id и не выводил trans_id, считая по умолчанию, что эти коллбэки приходят в той же последовательности, в какой выставляются заявки. Поэтому, видя сообщение "Скорректированное значение НПР1 -1553943.84 (RUB) меньше 0" или что инструмент не торгуется в шорт и время в этих сообщениях больше, чем 09:50:04, я считал, что на сервере брокера поздно загружаются данные о моём счёте (после начала приёма предварительных заявок). Несколько раз им звонил по этому поводу, и никто не мог сказать, в чём там дело. И только где-то на 3-4-й раз попался админ, который посмотел журнал сервера и пояснил, что, когда я получаю эти сообщения, мои заявки на покупку и продажу уже приняты, просто, я получаю сообщения сначала от более поздних заявок. Когда я стал выводить trans_id, то немного ахнул: один раз при выставлении 15 заявок сообщения в OnTransReply я получил точно в обратном порядке, т.е. сначала от 15-й по очереди заявки и в конце от 1-й. А сегодня я получил эти сообщения строго по очереди подачи заявок: сначала от 1-й, а в конце от 15-й...
как узнать количество транзакций?
 
Цитата
Serge123 написал:
Тем более, что на их сайте об этом написано оригинальным языком.
Я имел в виду, что на их сайте описаны (в хорошем смысле) условия наложения штрафов.
как узнать количество транзакций?
 
Цитата
Anton Belonogov написал:
Рекомендуем уточнить эту информацию у специалистов биржи или у Вашего брокера.
Сейчас позвонил брокеру, там после косультаций оператор ответила, что в связи с выставлением ошибочных заявок у них не предусмотрено ни штрафов, ни комиссий. Звучит немного странно, скорее всего, попались люди, которые в этом не разбираются (такое у меня уже было..)

Мосбиржу беспокоить неохота, от них будет отписка с количеством информации = 0 (мол, не беспокойте больших людей). Тем более, что на их сайте об этом написано оригинальным языком. Кто-то на форуме смарт-лаба предположил, что там специально держат такого человека, чтобы были непонятны правила работы биржи и отъёма средств сравнительно честными способами...

Если бы меня за хороший гонорар наняли отредактировать эти правила или, скажем, налоговый кодекс, я бы смог написать это понятным языком и при этом юридически строго (как мне кажется).
как узнать количество транзакций?
 
Цитата
Nikolay написал:
А зачем Вы отправляете еще одну транзакцию пока не дождались ответа от прошлой? Отправили, получили ответ, принимаете решение.
Приходится в начале приёма предварительных заявок (в 09:50) раз несколько повторять заявки, т.к. скрипт не сразу узнаёт, что они приняты. А если ждать, когда получу ответ, то я могу не встать в начало очереди, а она растёт быстро. Немного промедлил, за это время кинули заявок на покупку 300 млн. акций, и в принципе можно выключать ПК, т.к. ловить в этом инструменте будет нечего. К тому же, я сижу далековато от Москвы, поэтому точность синхронизации часов не лучше 0.01 сек.

Возможно, мне стОит проверять число записей в таблице заявок: кто-то тут писал, что туда информация приходит быстрее, чем в OnTransReply. Тогда скрипт может меньше посылать ошибочных заявок.

Брокер ВТБ почему-то не даёт торговать на премаркете, при этом я иногда видел, как кто-то до 10:00 совершает сделки с моими заявками, которые я успел выставить пораньше.
Какими заявками крупный игрок накапливает позицию?
 
Цитата
nikolz написал:
В качестве ликбеза:
Ясно. А как сейчас торгуют крупные игроки, можно где-то почитать/послушать? Чтобы набраться опыта в торговле и попробовать что-то заработать программным путём...
как узнать количество транзакций?
 
Цитата
Anton Belonogov написал:
Сообщение 1 возвращает Торговая система, сообщения 2 и 3 - сервер брокера.
При получении сообщений 2 и 3 для выяснения причин ошибки или получения дополнительной информации Вы можете обратиться к Вашему брокеру.
Спасибо. Торговой системой, насколько я понял, называется сервер биржи(?) Я не знаю в подробностях, как там на бирже всё работает...

Сообщения 2 и 3 ясны: эти мои заявки на покупку и на продажу уже выполнились, но мой скрипт ещё не получил подтверждений этого, поэтому он повторяет эти заявки, которые уже стали необеспеченными (ошибочными).

Насколько я понял, таких ошибок допускается в день до 30000, чтобы не было штрафов? А месячный лимит на их число есть? Я смотрел биржевую документацию, но она написано на таком кривом жаргоне (как и законы), да ещё и с формулами, что очень тяжело что-то понять...
Какими заявками крупный игрок накапливает позицию?
 
Цитата
nikolz написал:
Вы о каком типе крупного игрока рассуждаете?
Они разные есть.
Я не знаком с ними, я смотрел видео от опытных трейдеров. Они говорят о 3-х фазах рынка - накоплении, движении цены и распределении. Если боковик идёт месяцами, то я не установлю, что это кто-то один что-то там копит. На графиках видно, что перед взлётом цены она какое-то время идёт в узком канале вбок. Возможно, что здесь кт-то что-то копит...
как узнать количество транзакций?
 
Я в 9:50 при выставлении заявок несколько раз программно повторяю одну заявку, т.к. не сразу узнаЮ, выполнилась она или нет, и получаю такие ошибки (всего штук 14) trans_reply.result_msg:

1. ОШИБКА: (133) Торги по этому финансовому инструменту сейчас не проводятся.
2. Данный инструмент запрещен для операции шорт
3. Скорректированное значение НПР1 -1540915.18 (RUB) меньше 0

2-е и 3-е сообщения это явно не от биржи, скорее, от брокера. А может быть, это Квик на моём ПК сообщает? Он же может проверять такие ошибки?  
как узнать количество транзакций?
 
Поясните, что значит кол-во транзакций? Я видел на сайте Мосбиржи ограничение на 2000 невыполненных заявок в сутки, после этого биржа молча может повысить комиссию. Насчёт ограничений по кол-ву транзакций я не слышал. Где об этом можно прочитать?
Какими заявками крупный игрок накапливает позицию?
 
Кр. игроку иногда нужны месяцы, чтобы нарастить позицию/скинуть акции. Чтобы не обнаружить себя и не двинуть цену против себя, он долгле время продаёт/покупает небольшими частями. Вопрос в том, как обнаружить, что в этом инструменте действует кр. игрок, и что он делает, чтобы узнать, куда он резко двинет цену.
Какими заявками крупный игрок накапливает позицию?
 
Вопрос о том, как угадать, куда поведёт цену крупный игрок после периода накопления. В периоде накопления (боковике) рыночными или лимитными заявками крупный игрок накапливает позицию? Как ещё можно определить его действия?
os.execute с правами админа
 
Цитата
nikolz написал:
А зачем устанавливать системные часы?
Перед началом торгов время исправляю и в течение дня подправляю. Надо бы это корректировать из Lua скрипта, руки до всего не доходят...
Можно ли узнать, что скрипт qlua не дополучает инфо по onalltrade/onquote?
 
Вот здесь нашёл вроде бы верные ответы:
https://forum.quik.ru/messages/forum10/message25916/topic220/#message25916
https://forum.quik.ru/messages/forum10/message7363/topic773/#message7363
os.execute с правами админа
 
GetLastError выдаёт 1314. На стр. https://learn.microsoft.com/ru-ru/windows/win32/debug/system-error-codes--1300-1699- читаю:

===
ERROR_PRIVILEGE_NOT_HELD
1314 (0x522)
Клиент не располагает требуемыми правами доступа.
===
Можно ли узнать, что скрипт qlua не дополучает инфо по onalltrade/onquote?
 
Хм, а я как-то не обращал внимание на эти функции. Тогда выходит, что можно не загружать ЦП коллбэком OnAllTrade, если всё это можно брать напрямую из таблицы all_trades?

Хочу ещё уточнить, как узнавать направление сделки по флагам, описание на https://luaq.ru/getItem.html неясное:

===
Набор битовых флагов
Параметр Тип Описание
бит 0 (0x1) - Сделка на продажу
бит 1 (0x2) - Сделка на покупку
===

Такое чувство, что я всё время неправильно определяю направление (buy или sell). Я считал, что если младший бит = 0, то buy, а если младший бит = 1, то sell.

А из этого объяснения вроде бы следует, что если мл. бит = 1, то это sell, а если следующий за младшим битом бит = 1, то это buy, так? Вроде бы можно было обойтись одним мл. битом...
Можно ли узнать, что скрипт qlua не дополучает инфо по onalltrade/onquote?
 
Насколько я понял, размер таблицы обезл. сделок можно получить через
Код
getNumberOf('all_trades')
А как скрипту прочитать эту таблицу? По-моему, никак...
os.execute с правами админа
 
Интуитивно ясно, что она не должна уметь включать права админа (откуда ей знать его пароль?)
Хотя, на стр. https://learn.microsoft.com/ru-ru/windows/win32/api/sysinfoapi/nf-sysinfoapi-setlocaltime
что-то такое сказано:

===
Комментарии
Вызывающий процесс должен иметь привилегию SE_SYSTEMTIME_NAME. Эта привилегия отключена по умолчанию. Функция SetLocalTime включает привилегию SE_SYSTEMTIME_NAME перед изменением местного времени и отключает привилегию перед возвратом.
===

Я сейчас запустил её из Фара, который запущен не с правами админа, SetLocalTime возвращает 0 (ошибка) и время не меняет...
Вопросы к спецам по Lua и Lua C API
 
1. Будет ли утечка памяти, если C dll при работе со стеком Lua не будет вызывать lua_pop? Ведь сказано, что Lua при каждом вызове подпрограммы из C dll создаёт этот стек заново.

2. Решит ли проблему с возможной утечкой памяти, если не вызывать lua_pop, а в конце работы со стеком вызвать lua_settop(0)? Я думаю, что решит, т.к. lua_pop это макрос, который вызывает lua_settop.

3. Я попытался увидеть сборку мусора и написал такой код:
Код
function main()
s = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
local s1 = '' .. collectgarbage("count") .. '\n'
s = nil
s1 = s1 .. collectgarbage("count") .. '\n'
collectgarbage("collect")
sleep(10000)
s1 = s1 .. collectgarbage("count") .. '\n'
message(s1)
end
Получил такой вывод:

37.5439453125
37.619140625
36.046875

Видно, что памяти освободилось меньше, чем занимала строка s. Как это объяснить?
Страницы: Пред. 1 2 3 4 5 6 7 8 9 След.
Наверх