LINUX.ORG.RU

История изменений

Исправление Anoxemian, (текущая версия) :

Бро, интересно стало. Смотри, развоплощение строки в таблицу дает буст x2, а узкое место я комментами пометил. Очень странное поведение, но что есть, то есть:

function mylen(s,n)
    local count = 0
    for a = 1, n do
        local i = 1
        count = 0
        while s[i] do
---            if s[i] < 128 or s[i] >= 192 then
                count = count + 1
---            end
            i = i + 1
        end
    end
    return count
end

function mylen2(s,n)
    local count = 0
    local len = #s
    for a = 1, n do
        count = 0
        for i = 1, len do
            byte = s:byte(i)
            if byte < 128 or byte >= 192 then
                count = count + 1
            end
        end
    end
    return count
end


local time = os.clock()
local bytes = { string.byte("Привет мир!", 1, -1) }
print(mylen(bytes, 100000))
print("Прошло: " .. os.clock()-time)

time = os.clock()
print(mylen2("Привет мир!", 100000))
print("Прошло: " .. os.clock()-time)
20
Прошло: 0.036844
11
Прошло: 0.168108

Исходная версия Anoxemian, :

Бро, интересно стало. Смотри, развоплощение строки в таблицу дает буст x2, а узкое место я комментами пометил. Очень странное поведение, но что есть, то есть:

function mylen(s,n)
    local count = 0
    for a = 1, n do
        local i = 1
        count = 0
        while s[i] do
---            if s[i] < 128 or s[i] >= 192 then
                count = count + 1
---            end
            i = i + 1
        end
    end
    return count
end

function mylen2(s,n)
    local count = 0
    local len = #s
    for a = 1, n do
        count = 0
        for i = 1, len do
            byte = s:byte(i)
            if byte < 128 or byte >= 192 then
                count = count + 1
            end
        end
    end
    return count
end


local time = os.clock()
local bytes = { string.byte("Привет мир!", 1, -1) }
print(mylen(bytes, 100000))
print("Прошло: " .. os.clock()-time)

time = os.clock()
print(mylen2("Привет мир!", 100000))
print("Прошло: " .. os.clock()-time)