Напишем функцию, которая в 3.2 раз быстрее splitDisassembledString(disassemble(address))
\-- Линия: 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)) )
Сравнивая скорости получаем оптимизацию в ~3.20 раза быстрее.
Пример использования
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)
gsub очищает пробелы, а выражение '^(.-)%-(.-)%-(.-)$' позволит захватить данные между тире в строке.
Может пригодится, когда трейсим своим Lua кодом.
Если заинтересовали регулярки: ссылка