Как стать автором
Обновить

Комментарии

function get_sample(s, sample_index) local byte_index = 2*sample_index - 1 local L = string.byte(s, byte_index) local H = string.byte(s, byte_index + 1)

Можно схлопнуть до одного обращения

local L, H = s:byte(byte_index, byte_index + 1)

А так как это горячее место, то обычно идут в ход разные заморочки типа локализации горячих переменных/функций (чтобы Lua VM не лезла через всю цепочку locals, upvalues, globals), а находила нужные переменные самое позднее в upvalues.

И вообще (: string хоть и всеядное, но медленное место в Lua. Раз тут все равно числодробительные данные, может стоит их ещё на стороне C записать в array-часть таблицы целочисленным типом и отдать Lua уже эту таблицу. Опционально указывать размер данных в новом пакете (т.е. при передаче в фильтр), чтобы таблицу вообще можно было переиспользовать без реаллокации (если новых данных ровно или незначительно меньше, чем старых).

Спасибо за комментарий! Первую рекомендацию перенес в код. Вторую часть рекомендаций с применением таблицы оставил тем, кому потребуется выжать максимум из этого фильтра.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории