<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Оптимизация splitDisassembledString()]]></title><description><![CDATA[<p dir="auto">Напишем функцию, которая в 3.2 раз быстрее <code> splitDisassembledString(disassemble(address))</code></p>
<pre><code>\-- Линия: 0045464A - FF 05 A4B54500        - inc [0045B5A4] { [000003EA] }

function GetDebugString(address)
  return splitDisassembledString(disassemble(address))
end

\-- address, bytes, opcode
function GetDebugString2(address)
  local clearString = string.gsub(disassemble(address), '%s','')
  return string.match(clearString, '^(.-)%-(.-)%-(.-)$')
end

function NoOptimizeCode()
  GetDebugString(0x0045464A)
end

function OptimizeCode()
   GetDebugString2(0x0045464A)
end

local countRepeat = 100000 -- add more cycle
local x1 = 0
local x2 = 0

x1 = getTickCount()
for i = 1, countRepeat do NoOptimizeCode() end
x2 = getTickCount()
for i = 1, countRepeat do OptimizeCode() end

print(string.format("%.2f", (x2 - x1)/(getTickCount() - x2)) )
</code></pre>
<p dir="auto">Сравнивая скорости получаем оптимизацию в <strong>~3.20</strong> раза быстрее.<br />
Пример использования</p>
<pre><code>function GetDebugString2(address)
  local clearString = string.gsub(disassemble(address), '%s','')
  return string.match(clearString, '^(.-)%-(.-)%-(.-)$')
end

local address, bytes, opcode = GetDebugString2(0x0045464A)

print(address)
print(bytes)
print(opcode)
</code></pre>
<p dir="auto"><code>gsub</code> очищает пробелы, а выражение <code>'^(.-)%-(.-)%-(.-)$'</code> позволит захватить данные между тире в строке.<br />
Может пригодится, когда трейсим своим Lua кодом.<br />
Если заинтересовали регулярки: <a href="https://www.lua.org/manual/5.3/manual.html#6.4.1" target="_blank" rel="noopener noreferrer nofollow ugc">ссылка</a></p>
]]></description><link>https://celua.ru/topic/28/оптимизация-splitdisassembledstring</link><generator>RSS for Node</generator><lastBuildDate>Wed, 17 Jun 2026 13:42:56 GMT</lastBuildDate><atom:link href="https://celua.ru/topic/28.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Apr 2023 22:58:48 GMT</pubDate><ttl>60</ttl></channel></rss>