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}) происходит выделение памяти в куче, а для неизменяемой - не происходит.
Но в статье специально указывается, что к этому не нужно относиться буквально. И помимо ссылки, указанной в статье, хочу прикрепить ещё одну - ответ одного из разработчиков языка Julia.
В свою очередь статический вектор:
И мы видим, как в случае для изменяемой структуры
(Vector{Int})происходит выделение памяти в куче, а для неизменяемой - не происходит.Но в статье специально указывается, что к этому не нужно относиться буквально. И помимо ссылки, указанной в статье, хочу прикрепить ещё одну - ответ одного из разработчиков языка Julia.