<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Сдвиговые регистры, циклические массивы. Экономим память]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Сдвиговые регистры, циклические массивы. Экономим память форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Mon, 25 May 2026 08:13:49 +0300</pubDate>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message74018/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<a class="blog-p-user-name" id="bp_qEBjUsnL" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, Не знаю кто что проходил, но мой вариант &nbsp;Вот , <br />
====code====
<pre>function List.new()
 --return {first = 0, last = -1}
 return {first = 0, last = 0}
end

local list=List.new()
local length=10; local M=1000--00--00
print("объем начального массива", M, "Кол. элементов в созданном length=",length);
local count1 = collectgarbage("count") -- получаем текущий размер памяти
------------------------------ LIFO
for i=1, M do

print(i, ')','Начальные индексы', 'list.first =', list.first, '; list.last =', list.last )

List.pushlast(list,i)
print(i, ')','Вставил', 'index list.last =', list.last,'; присвоил значение элементa =',list&#91;list.last&#93;, '(',collectgarbage("count"),')' )

if i&#62;length then
List.popfirst(list)
print( i, 'Операция - Удаление первого:', ')', 'присвоил индекс первоve элементу =', list.first, 'вернул значение первого элементa =', list&#91;list.first&#93; ,'(',collectgarbage("count"),')' ) --, list.first
end

end
print("LIFO (вариант реализации стека с помощью двусторонней очереди.) ----------------------");
print("начальный объем занятой памяти",count1);

print("число элементов в LIFO list после "..(M).." циклов функции рор=" ..(list.last-list.first))
local countOUT = collectgarbage("count")
print("объем занятой памяти",countOUT);
--------------------------------
collectgarbage("collect")
print("объем занятой памяти после сборщика мусора",collectgarbage("count"));</pre>
=============
это стек, который в трейдинге называют динамическим окном, у меня в этом примере все доделано, &nbsp;<br />то что вы демонстрируете это просто вставка элементов в массив, как она вообще может уменьшаться? <br />
			<i>24.01.2024 10:47:29, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message74018/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message74018/topic8471/</guid>
			<pubDate>Wed, 24 Jan 2024 10:47:29 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message74011/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			чтобы массив был ограничен по размеру, его надо закольцевать. <br />Очевидно, Виктор &nbsp;это не проходил. &nbsp; <br />
			<i>24.01.2024 09:06:53, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message74011/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message74011/topic8471/</guid>
			<pubDate>Wed, 24 Jan 2024 09:06:53 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message74010/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<noindex><a href="https://forum.quik.ru/user/16131/" target="_blank" rel="nofollow">VPM</a></noindex>,<br />Я ранее написал, что Ваш вариант - это недоделанный циклический массив, тест которого я привел вторым.<br />Рекомендую доделать, тогда будет работать , но чтение из него в луа, как тоже уже писал, медленнее чем из сдвигового. <br />
			<i>24.01.2024 09:04:09, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message74010/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message74010/topic8471/</guid>
			<pubDate>Wed, 24 Jan 2024 09:04:09 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message74009/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<noindex><a href="https://forum.quik.ru/user/16131/" target="_blank" rel="nofollow">VPM</a></noindex>,<br />Можете пояснить, <br />как в вашем варианте прочитать весь массив с 1 по последний <br />и сколько времени на это уйдет по сравнению с чтением типа t&#91;i&#93; &nbsp;где i от 1 до #t.<br />--------------<br />И для какой задачи Вы планируете его применять.<br />-------------<br />Я определил область применения моего варианта. <br />А как применять Вашу очередь? <br />
			<i>24.01.2024 09:00:14, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message74009/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message74009/topic8471/</guid>
			<pubDate>Wed, 24 Jan 2024 09:00:14 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message74008/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<noindex><a href="https://forum.quik.ru/user/16131/" target="_blank" rel="nofollow">VPM</a></noindex>,<br />вот результаты &nbsp;тестов:<br />это тест моих функций &nbsp;сдвиговый &nbsp;массив.<br />
====code====
<pre>local M=1000000
local t=newCA(1024)
for i=1, M do&nbsp;&nbsp;setCA(t,i) end
count1 = collectgarbage("count") print("объем занятой памяти",count1//1);
--------------------------------
collectgarbage("collect") count1 = collectgarbage("count") print("объем занятой памяти после сборщика мусора",count1//1);

</pre>
=============
результат:
====code====
<pre>&#62;D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "Test_List.lua" 
объем занятой памяти&nbsp;&nbsp;&nbsp;82.0
объем занятой памяти после сборщика мусора&nbsp;&nbsp;&nbsp;76.0
&#62;Exit code: 0
</pre>
=============
тест циклический массив:
====code====
<pre>local M=10000000
local t=nk_newV(1024)
for i=1, M do&nbsp;&nbsp;nk_push(t,i) end
count1 = collectgarbage("count") print("объем занятой памяти",count1//1);
collectgarbage("collect") count1 = collectgarbage("count") print("объем занятой памяти после сборщика мусора",count1//1);
</pre>
=============
результат:
====code====
<pre>&#62;D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "Test_List.lua" 
объем занятой памяти&nbsp;&nbsp;&nbsp;97.0
объем занятой памяти после сборщика мусора&nbsp;&nbsp;&nbsp;91.0
&#62;Exit code: 0
</pre>
=============
тест для Вашей функции 
====code====
<pre>local M=10000000
local list=List.new()
local count1 = collectgarbage("count") print("начальный объем занятой памяти",count1//1);
--------------------------
for i=1, M do&nbsp;&nbsp;List.pushlast(list,i)&nbsp;&nbsp; end
collectgarbage("collect") count1 = collectgarbage("count")&nbsp;&nbsp;print("объем занятой памяти после сборщика мусора",count1//1);
</pre>
=============
 результат:
====code====
<pre>&#62;D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "Test_List.lua" 
начальный объем занятой памяти&nbsp;&nbsp;&nbsp;65.0
объем занятой памяти после сборщика мусора&nbsp;&nbsp;&nbsp;262203.0
&#62;Exit code: 0
</pre>
=============
Какой еще тест сделать? <br />
			<i>24.01.2024 08:43:49, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message74008/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message74008/topic8471/</guid>
			<pubDate>Wed, 24 Jan 2024 08:43:49 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message74007/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<a class="blog-p-user-name" id="bp_rhTjLziC" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;программа и тест есть на 25 странице в моей теме Двойные очереди.<br /><br />Сложно с Вами с программистами, каждый на своей волне, &quot;забейте&quot;, проще самому провести. <br />
			<i>24.01.2024 08:36:11, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message74007/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message74007/topic8471/</guid>
			<pubDate>Wed, 24 Jan 2024 08:36:11 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message74004/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Если Вы считаете, что Вы правы, то просто покажите свой тест и результаты и будет предмет обсуждения.<br />Пока же у Вас лишь программа и ваша вера, что она экономит память. <br />
			<i>24.01.2024 08:03:27, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message74004/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message74004/topic8471/</guid>
			<pubDate>Wed, 24 Jan 2024 08:03:27 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message74003/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Если Вы считаете, то просто покажите свой тест и результаты и будет предмет обсуждения.<br />Пока же у Вас лишь программа и ваша вера, что она экономит память. <br />
			<i>24.01.2024 08:02:49, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message74003/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message74003/topic8471/</guid>
			<pubDate>Wed, 24 Jan 2024 08:02:49 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message74002/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_JRAHBRqI" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Вот из букваря:<br /><br /> &nbsp;Стек &nbsp; — это коллекция, элементы которой получают по принципу «последний вошел, первый вышел» (Last-In-First-Out или LIFO).<br />Это значит, что мы будем иметь доступ только к последнему добавленному элементу.<br /><br /> &nbsp;Очереди &nbsp; &nbsp; очень похожи на стеки. Они также не дают доступа к произвольному элементу, но, в отличие от стека, элементы кладутся (enqueue) и забираются (dequeue) с разных концов.<br />Такой метод называется «первый вошел, первый вышел» (First-In-First-Out или FIFO).<br />То есть забирать элементы из очереди мы будем в том же порядке, что и клали. Как реальная очередь или конвейер.<br /><br /> &nbsp;Двусторонняя очередь &nbsp; (Double-ended queue), или дек (Deque), расширяет поведение очереди. <br />В дек можно добавлять или удалять элементы как с начала, так и с конца очереди. <br />Такое поведение полезно во многих задачах, например, планирование выполнения потоков или реализация других структур данных. <br /><br />Позже мы рассмотрим &nbsp; вариант реализации стека с помощью двусторонней очереди &nbsp;.<br />=============<br />Будем считать, что у нас разные определения этих понятий.<br />------------------------------<br />Но это не важно. <br />Важно, что ваш вариант не работает. <br />
			<i>24.01.2024 08:00:51, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message74002/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message74002/topic8471/</guid>
			<pubDate>Wed, 24 Jan 2024 08:00:51 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message74001/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_9xRHC6yX" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, &nbsp;Это я и хотел сравнить, сделать один размер массивов, один размер окна прогнать на скорость на память, на время исполнения? <br />====quote====<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> написал:<br />и еще...<br />ваша стек-очередь напоминает недоделанный циклический массив.<br />Если его доделать, то он будет делать ровно тоже самое, что и мой вариант сдвига массива выше.<br />--------------------<br />Циклический массив работает быстрее, чем сдвиг массива.<br />Но в луа из него медленнее брать данные.<br />Его интереснее делать на C и встраивать сразу в индикаторы и фильтры.<br />Но это уже другая тема.<br />=============<br /> <br />=============<br />Вы нем поняли. В вашем случае нельзя сделать размер постоянным.<br />Он будет лишь увеличиваться при записи в конец. &nbsp;Но не будет уменьшаться.<br />----------------<br />Это я показал Вам в своем тесте.<br />Там в конце Ваша очередь-стек имеет ноль элементов , но размер памяти занятый массивом остался такой же как при записи миллиона элементов.<br />--------------------<br />В моем варианте Вы изначально фиксируете длину массива и она остается всегда такой же. <br />
			<i>24.01.2024 07:58:14, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message74001/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message74001/topic8471/</guid>
			<pubDate>Wed, 24 Jan 2024 07:58:14 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message73994/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<a class="blog-p-user-name" id="bp_xvzgDq9h" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Это я и хотел сравнить, сделать один размер массивов, один размер окна прогнать на скорость на память, на время исполнения?<br />====quote====<br /><a class="blog-p-user-name" id="bp_7lZ571h8" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />и еще...<br />ваша стек-очередь напоминает недоделанный циклический массив.<br />Если его доделать, то он будет делать ровно тоже самое, что и мой вариант сдвига массива выше.<br />--------------------<br />Циклический массив работает быстрее, чем сдвиг массива.<br />Но в луа из него медленнее брать данные.<br />Его интереснее делать на C и встраивать сразу в индикаторы и фильтры.<br />Но это уже другая тема.<br />=============<br /> <br />
			<i>23.01.2024 18:17:11, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message73994/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message73994/topic8471/</guid>
			<pubDate>Tue, 23 Jan 2024 18:17:11 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message73993/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Вот из букваря:<br /><br /><span class="bx-font" style="color:#005824"><B>Стек</B></span> — это коллекция, элементы которой получают по принципу «последний вошел, первый вышел» (Last-In-First-Out или LIFO).<br />Это значит, что мы будем иметь доступ только к последнему добавленному элементу.<br /><br /><span class="bx-font" style="color:#2f3192"><B>Очереди</B></span><span class="bx-font" style="color:#2f3192"> </span>очень похожи на стеки. Они также не дают доступа к произвольному элементу, но, в отличие от стека, элементы кладутся (enqueue) и забираются (dequeue) с разных концов.<br />Такой метод называется «первый вошел, первый вышел» (First-In-First-Out или FIFO).<br />То есть забирать элементы из очереди мы будем в том же порядке, что и клали. Как реальная очередь или конвейер.<br /><br /><span class="bx-font" style="color:#7a0045"><B>Двусторонняя очередь</B></span> (Double-ended queue), или дек (Deque), расширяет поведение очереди. <br />В дек можно добавлять или удалять элементы как с начала, так и с конца очереди. <br />Такое поведение полезно во многих задачах, например, планирование выполнения потоков или реализация других структур данных. <br /><br />Позже мы рассмотрим<span class="bx-font" style="color:#ee1d24"><B> вариант реализации стека с помощью двусторонней очереди</B></span>. <br />
			<i>23.01.2024 17:57:42, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message73993/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message73993/topic8471/</guid>
			<pubDate>Tue, 23 Jan 2024 17:57:42 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message73992/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<a class="blog-p-user-name" id="bp_n0KZnyfN" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Вы попробуйте пример, &nbsp; никакие nil не вставляются, если Вы об этом<br /> if first &gt; list.last then &nbsp; return nil &nbsp; end, <br />то это только проверка на ошибку.<br /><br />В моем примере этой ошибки быть не может, так как вставляется последний элемент, &nbsp;массив нарастает до значения length &nbsp;if i&gt;length then, (то есть определен размер окна).<br />После достижения идет присвоение последнего &nbsp;и переписывание первого значения окна. Все. <br />
			<i>23.01.2024 17:50:31, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message73992/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message73992/topic8471/</guid>
			<pubDate>Tue, 23 Jan 2024 17:50:31 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message73991/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			и еще...<br />ваша стек-очередь напоминает недоделанный циклический массив.<br />Если его доделать, то он будет делать ровно тоже самое, что и мой вариант сдвига массива выше.<br />--------------------<br />Циклический массив работает быстрее, чем сдвиг массива.<br />Но в луа из него медленнее брать данные.<br />Его интереснее делать на C и встраивать сразу в индикаторы и фильтры.<br />Но это уже другая тема. <br />
			<i>23.01.2024 17:25:07, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message73991/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message73991/topic8471/</guid>
			<pubDate>Tue, 23 Jan 2024 17:25:07 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message73990/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><noindex><a href="https://forum.quik.ru/user/16131/" target="_blank" rel="nofollow">VPM</a></noindex>,<br />Возможно я не понял, вопроса, <br />Но так как Вы возвращаетесь к этой идеи уже многократно, то поясню подробнее в чем у Вас ошибка.<br />---------------------<br />Во-первых, в терминологии. &nbsp;<br />Вы уж не обижайтесь, но прежде, чем обсуждать надо быть уверенным ,<br />что мы с вами горшками называем горшки, а цветами -цветы.<br />------------------<br />Так вот, <br />Стек и очередь это две большие разницы. <br />Стек - это кипа - т е представьте кипу листов бумаги на столе. Вы положили лист сверху и взяли его.<br />--------------------<br />или еще пример стека - это обойма в автомате &nbsp;патрон лежащий сверху выйдет первым.<br />-----------------<br />Т е принцип последним зашел -первым вышел.<br />-------------------------<br />Очередь &nbsp;-это первый зашел и первым купил. <br />Наглядный пример - очередь в магазине за яйцами.<br />------------------------<br />Поэтому невозможно стек сделать из очереди.<br />Если конечно Вы не сторонник смотреть гланды через зад.<br />====================<br />Но это не главное.<br />========================<br />Давайте посмотрим на то как вы пытаетесь &nbsp;уменьшить память, создав нечто,<br /> в котором Вы синхронно выкидываете первый элемент и запихиваете последний.<br />----------------------------<br />Ничего это вам не напоминает? А посмотрите эту мою тему Про сдвиговые регистры.<br /> Именно это и происходи в них.<br />--------------------<br />Но они реализуются методами, которые я описал выше.<br />===================<br />Если же Вы будете просто в массиве луа стирать первый элемент, <br />записывая туда nil и добавлять в конец новый, то массив будет увеличиваться на этот новый элемент.<br />----------------------------------------<br />В луа для хранения одного числа в таблице тратится 12 байт.<br /> Когда Вы пишите nil в первый элемент, то память из под него не освобождается,<br /> так как ее невозможно удалить из того блока памяти, который уже выделен для этого массива. &nbsp;<br />-------------------<br />В лучшем случае освободится память на элемент массива, если он является тоже таблицей.<br />======================<br />вот ваш вариант.
====code====
<pre>---- Операции вставки -- table.insert
function List.pushlast (list, value)&nbsp;&nbsp; local last = list.last + 1;&nbsp;&nbsp; list.last = last;&nbsp;&nbsp; list&#91;last&#93; = value; end
---- Операции удаления -- table.remove
function List.popfirst (list)
&nbsp;&nbsp;local first = list.first;&nbsp;&nbsp;if first &#62; list.last then&nbsp;&nbsp; return nil&nbsp;&nbsp; end
&nbsp;&nbsp;local value = list&#91;first&#93;&nbsp;&nbsp; list&#91;first&#93; = nil&nbsp;&nbsp; list.first = first + 1&nbsp;&nbsp;return value&nbsp;&nbsp;end
</pre>
=============
 list&#91;last&#93; = value; &nbsp;-- этот оператор записывает в таблицу новое значение.<br />--------------------------------<br />При создании таблицы , ей выделяется место в оперативной памяти. &nbsp;<br />----------------------------------<br />Если при записи нового значения места не хватает, то оно будет увеличено.<br />-----------------------<br />C точки зрения сборки мусора. <br />Объектом для сборки является вся таблица, а не отдельная ее ячейка.<br />================<br />Когда Вы в функции popfirst &nbsp;делаете это: &nbsp; &nbsp;list&#91;first&#93; = nil <br />то в ячейке таблицы в параметр тип элемента записывается ноль. <br />Но память для хранения этого типа и значения элемента не может быть освобождена, <br />так как она не является самостоятельным объектом. Это часть память таблицы.<br />=======================<br />Таким образом, в вашем варианте таблица может только увеличивать объем занимаемой памяти, но не уменьшать ее.<br />=========================<br />Уменьшать, можно лишь так, как я рассказал в этой теме.<br /><br /><br /><br />=============<br /> <br />
			<i>23.01.2024 17:11:21, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message73990/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message73990/topic8471/</guid>
			<pubDate>Tue, 23 Jan 2024 17:11:21 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message73989/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Я Вам говорю про этот вариант, в Вашем первоначальном есть логическая ошибка, это тоже окно ну или стек:<br /><br />Пример от <noindex><a href="https://forum.quik.ru/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, &nbsp;оказал не оценимую помощь, помог разобраться в чем была путаница и не до понимание, помог собрать вариант который я объяснял.<br /><br />Ниже пример, то о чем пытался я сказать.<br />И что мы видим, реализован принцип LIFO &nbsp;«последний вошел, первый вышел» (Last-In-First-Out или LIFO). Это вариант стека с помощью двусторонней очереди, не смотря на то что алгоритм называется двусторонняя очередь, собран СТЕК! &nbsp;<img src="https://forum.quik.ru/upload/main/smiles/5/icon_eek.png" alt="Пользователь добавил изображение" border="0" /><br /><br />function List.new()<br /> &nbsp;--return {first = 0, last = -1}<br /> &nbsp;return {first = 0, last = 0}<br />end<br /><br /><table class="data-table"><tr><th>Код</th></tr><tr><td>local list=List.new()<br />local length=10; local M=1000--00--00<br />print(&quot;объем начального массива&quot;, M, &quot;Кол. элементов в созданном length=&quot;,length);<br />local count1 = collectgarbage(&quot;count&quot;) -- получаем текущий размер памяти<br />------------------------------ LIFO<br />for i=1, M do <br /> <br />print(i, &#39;)&#39;,&#39;Начальные индексы&#39;, &#39;list.first =&#39;, list.first, &#39;; list.last =&#39;, list.last )<br /><br />List.pushlast(list,i)<br />print(i, &#39;)&#39;,&#39;Вставил&#39;, &#39;index list.last =&#39;, list.last,&#39;; присвоил значение элементa =&#39;,list&#91;list.last&#93;, &#39;(&#39;,collectgarbage(&quot;count&quot;),&#39;)&#39; )<br /><br />if i&gt;length then <br />List.popfirst(list)<br />print( i, &#39;Операция - Удаление первого:&#39;, &#39;)&#39;, &#39;присвоил индекс первоve элементу =&#39;, list.first, &#39;вернул значение первого элементa =&#39;, list&#91;list.first&#93; ,&#39;(&#39;,collectgarbage(&quot;count&quot;),&#39;)&#39; ) --, list.first<br />end<br /><br />end<br />print(&quot;LIFO (вариант реализации стека с помощью двусторонней очереди.) ----------------------&quot;);<br />print(&quot;начальный объем занятой памяти&quot;,count1);<br /><br />print(&quot;число элементов в LIFO list после &quot;..(M)..&quot; циклов функции рор=&quot; ..(list.last-list.first))<br />local countOUT = collectgarbage(&quot;count&quot;)<br />print(&quot;объем занятой памяти&quot;,countOUT);<br />--------------------------------<br />collectgarbage(&quot;collect&quot;)<br />print(&quot;объем занятой памяти после сборщика мусора&quot;,collectgarbage(&quot;count&quot;));</td></tr></table> <br />
			<i>23.01.2024 14:55:51, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message73989/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message73989/topic8471/</guid>
			<pubDate>Tue, 23 Jan 2024 14:55:51 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message73986/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_yDStQKQp" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, &nbsp;Вы можете сравнить это метод с <br />local lifo=List.new() List.pushlast(lifo,i) List.popfirst(lifo),<br />и где какой использовать лучше или предпочтительней<br />=============<br />Я уже сравнивал и вам в вашей теме выложил результат.<br />Вы очевидно его не читали.<br />------------<br />Если кратко, то Ваш вариант ничего не экономит.<br />Вы посмотрите там результат работы сборщика и пояснение почему Вы заблуждаетесь с этим вариантом.<br />--------------------<br />Если будет непонятно, то поясню дополнительно. <br />
			<i>23.01.2024 14:06:18, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message73986/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message73986/topic8471/</guid>
			<pubDate>Tue, 23 Jan 2024 14:06:18 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message73985/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<a class="blog-p-user-name" id="bp_EUG2CfuP" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Вы можете сравнить это метод с <br />local lifo=List.new() List.pushlast(lifo,i) List.popfirst(lifo),<br />и где какой использовать лучше или предпочтительней? <br />
			<i>23.01.2024 13:41:10, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message73985/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message73985/topic8471/</guid>
			<pubDate>Tue, 23 Jan 2024 13:41:10 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Сдвиговые регистры, циклические массивы. Экономим память</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message73982/topic8471/">Сдвиговые регистры, циклические массивы. Экономим память</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Добрый день,<br />В этой теме я расскажу кратко что такое сдвиговые регистры и циклические массивы.<br />И покажу как на Lua &nbsp;экономить память при создании роботов.<br />----------------------<br />При торговле на бирже приходит много информации, такой , как новости, результаты сделок, значения индикаторов, например свечей.<br />эта информация записывается в массивы и в файлы и может составлять очень большой объем. <br />------------------<br />Однако, при реальной торговле, для принятия решения, нет надобности не только во всей накопленной информации в файлах, но и порою нужна лишь информация за последние например 60 минут, свечей с интервалом 1 минута. <br />=================<br />Чтобы массивы с данными не разбухали до безумных размеров я реализую временное окно, <br />в пределах которого &nbsp;храню текущую информацию.<br />-------------------<br />Например, храним только 1024 последних отсчета.<br />Для этого необходимо выделить массив всего в 1024 элемента.<br />Для каждого нового отсчета необходимо сдвинуть содержимое массив влево на один отсчет, <br />а в освободившейся место записать принятое значение.<br />--------------------<br />Возникает вопрос как реализовать этот сдвиг элементов массива, чтобы было быстро.<br />---------------------<br />Один из приемов - циклические массивы. <br />-------------------<br />В таком массиве элементы не двигаются, а двигается указатель на место удаляемого первого элемента . <br />Это же место является местом размещения принятого элемента. <br />---------------<br />Еще одним способом является использование многобитовых регистров процессора, с помощью которых можно реализовать многобитовые сдвиги данных за одну операцию.<br />===================<br />В луа есть операции сдвига &gt;&gt;m (&lt;&lt;m). <br /> Они позволяют сдвинуть целое число на m разрядов влево ( вправо), что соответствует делению(умножению) этого числа на 2 в степени m. <br />Такая операция сдвига числа выполняется в регистре сдвига &nbsp;( в процессоре это АЛУ+регистры)<br />------------------<br />В современных процессорах Intel есть регистры в 256 бит (в последних 512 бит)<br />------------------------------<br />Так как число double занимает 64 бита, а long(integer в lua) 32 бита,<br /> то с помощью этих регистров можно сдвигать не одно число, а массив из 4,8,16 чисел одной командой.<br />Для простоты будем называть эти регистры 256(512) ,битовыми тоже сдвиговыми регистрами.<br />------------------<br />Очевидно, что с помощью этих регистров можно сдвигать массивы чисел.<br />=======================<br />Если не использовать С for lua, <br />то в скрипте на луа можно реализовать два способа работы с такими временными окнами.<br />------------------------------<br />Либо циклический массив,<br /> либо сдвиг элементов массива.<br />--------------------------------------<br />Так как данный ликбез в основном для начинающих, <br />то покажу наиболее простой способ, но при этом достаточно быстродействующий.<br />-------------------------------<br />Вот скрипт функций, которые реализуют механизм такого временного окна данных,<br />где N - размер временного окна
====code====
<pre>local function newCA(N) local t={}; for j=1,N do t&#91;j&#93;=0; end; return t; end --вставка нового элемента
local function setCA(t,X) table.remove(t,1); t&#91;#t+1&#93;=X;&nbsp;&nbsp;end --вставка нового элемента

</pre>
=============
Посмотрим, что сохраняется в таком массиве<br />Организуем цикл записи номеров отсчетов которые изменяются от 1 до M<br />и какие из отсчетов будут сохраняться в массиве фиксированной длины 32 элемента<br />
====code====
<pre>local M=1000000
local t=newCA(32)
for j=1,M do setCA(t,j)
print("j="..j..",t="..table.concat(t,","));
end
</pre>
=============
это содержимое массива на каждом цикле<br />
====code====
<pre>&#62;D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "test_lines.lua" 
j=1,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
j=2,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2
j=3,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3
j=4,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4
j=5,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5
j=6,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6
j=7,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7
j=8,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8
j=9,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9
j=10,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10
j=11,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11
j=12,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12
j=13,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13
j=14,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
j=15,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
j=16,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
j=17,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
j=18,t=0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
j=19,t=0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
j=20,t=0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
j=21,t=0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21
j=22,t=0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
j=23,t=0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
j=24,t=0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
j=25,t=0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
j=26,t=0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
j=27,t=0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27
j=28,t=0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28
j=29,t=0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29
j=30,t=0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
j=31,t=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
j=32,t=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
j=33,t=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33
j=34,t=3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34
j=35,t=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35
j=36,t=5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36
j=37,t=6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37
j=38,t=7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38
j=39,t=8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39
j=40,t=9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40
j=41,t=10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41
j=42,t=11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42
j=43,t=12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43
j=44,t=13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44
j=45,t=14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45
j=46,t=15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46
j=47,t=16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47
j=48,t=17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48
j=49,t=18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49
j=50,t=19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50
j=51,t=20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51
j=52,t=21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52
j=53,t=22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53
j=54,t=23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54
j=55,t=24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55
j=56,t=25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56
j=57,t=26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57
j=58,t=27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58
j=59,t=28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
j=60,t=29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60
j=61,t=30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61
j=62,t=31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62
j=63,t=32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63
j=64,t=33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
j=65,t=34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65
j=66,t=35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66
j=67,t=36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67
j=68,t=37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68
j=69,t=38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69
j=70,t=39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70
j=71,t=40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71
j=72,t=41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72
j=73,t=42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73
j=74,t=43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74
j=75,t=44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75
j=76,t=45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76
j=77,t=46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77
j=78,t=47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78
j=79,t=48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
j=80,t=49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80
j=81,t=50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81
j=82,t=51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82
j=83,t=52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83
j=84,t=53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84
j=85,t=54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85
j=86,t=55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86
j=87,t=56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87
j=88,t=57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88
j=89,t=58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89
j=90,t=59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90
j=91,t=60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91
j=92,t=61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92
j=93,t=62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93
j=94,t=63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94
j=95,t=64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95
j=96,t=65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96
j=97,t=66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97
j=98,t=67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98
j=99,t=68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99
j=100,t=69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
j=101,t=70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101
j=102,t=71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102
j=103,t=72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103
j=104,t=73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104
j=105,t=74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105
j=106,t=75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106
j=107,t=76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107
j=108,t=77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108
j=109,t=78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109
j=110,t=79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110
j=111,t=80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111
j=112,t=81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112
j=113,t=82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113
j=114,t=83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114
j=115,t=84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115
j=116,t=85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116
j=117,t=86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117

</pre>
=============
Оценим быстродействие такого метода для массива в 1024 элемента
====code====
<pre>local M=1000000
local t=newCA(1024)
--nklib.startA();
local tim=os.clock();
for j=1,M do setCA(t,j) end
--local tim=0.1*nklib.stopA()/M
tim=os.clock()-tim
print(1000000.*tim/M.." мкс" )
</pre>
=============
результат:
====code====
<pre>&#62;D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "test_lines.lua" 
10.099 мкс
&#62;Exit code: 0

</pre>
=============
Т .е. на сохранение одного нового элемента в таком массиве затрачивается примерно 10 мкс.<br />--------------------- <br />Таким образом, с помощью приведенных выше двух простых функций,<br /> Вы можете &nbsp;управлять расходом оперативной памяти в своем роботе,<br /> исходя из требуемого временного окна обработки поступающих данных. <br />
			<i>23.01.2024 10:03:45, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message73982/topic8471/</link>
			<guid>http://forum.quik.ru/messages/forum17/message73982/topic8471/</guid>
			<pubDate>Tue, 23 Jan 2024 10:03:45 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
	</channel>
</rss>
