Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотр
    15 631

CE Lua Оптимизация splitDisassembledString()


MasterGH

892 просмотра

Напишем функцию, которая в 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 кодом.

Если заинтересовали регулярки: ссылка

0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.