Skip to content
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Collapse
Brand Logo

CELua[RU]

  1. Главная
  2. Статьи
  3. Приёмы
  4. Оптимизация splitDisassembledString()

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

Запланировано Прикреплена Закрыта Перенесена Приёмы
ce luaoptimizationфишки
1 Сообщения 1 Posters 635 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • MasterGHM Не в сети
    MasterGHM Не в сети
    MasterGH Администраторы
    написал в отредактировано
    #1

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

    1 ответ Последний ответ
    0

Powered by NodeBB | Contributors
СeLua[RU] 2024©
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы