Производительность оператора длины таблицы

В Lua есть оператор # для вычисления «длины» таблицы, используемой в качестве массива. В таком языке, как C, после того, как вы вычислили длину чего-либо, вы обычно не вычисляете ее снова. например int len = strlen(string);

Отличается ли это в Lua? Один из них менее эффективен, чем другой?

(Очевидно, что это, вероятно, не покажет заметной разницы для довольно маленьких таблиц, но никогда не помешает знать.)


person charmlessCoin    schedule 13.08.2013    source источник


Ответы (1)


Значение # для таблицы не хранится внутри Lua: оно вычисляется при каждом вызове.

Lua использует бинарный поиск, поэтому стоимость логарифмична размеру таблицы. См. код по адресу http://www.lua.org/source/5.2/ltable.c.html#luaH_getn. Другими словами, стоимость практически постоянна, за исключением огромных столов.

person lhf    schedule 13.08.2013