Обновить
3
0

Пользователь

Отправить сообщение
function sqrt_sum()
    v = [i^2 for i in 1:100] # ОБЫЧНЫЙ вектор
    sqrt(sum(v))
end
@btime sqrt_sum()

#  84.305 ns (1 allocation: 896 bytes)
#  581.6786054171153

В свою очередь статический вектор:

function sqrt_sum()
    s_v = @SVector [i^2 for i in 1:100]   # СТАТИЧЕСКИЙ вектор
    sqrt(sum(s_v))
end
@btime sqrt_sum()

#  1.600 ns (0 allocations: 0 bytes)
#  581.6786054171153

И мы видим, как в случае для изменяемой структуры (Vector{Int}) происходит выделение памяти в куче, а для неизменяемой - не происходит.

ismutabletype(Vector{Int})       # true

ismutabletype(SVector{Int,100})  # false

Но в статье специально указывается, что к этому не нужно относиться буквально. И помимо ссылки, указанной в статье, хочу прикрепить ещё одну - ответ одного из разработчиков языка Julia.

Информация

В рейтинге
Не участвует
Работает в
Зарегистрирован
Активность