виновником является использование глобальных переменных. Ваша функция вызывает глобальную переменную, и при каждом вызове выделяется Int64 (64 бита). 64 * 16000000 * 5/1024/1024 = 4882.8125 МБ, похоже, виновник, что ваша функция не знает размер внутреннего цикла, и ищет глобальную область для проверки Ngal
. Это делает каждый цикл. Сравните это с этой реализацией:
function get_vinz(Ngal)
for i in 1:5
print(i, " ")
for j in i:Ngal
end
end
end
julia> @time get_vinz(Ngal)
1 2 3 4 5 0.043481 seconds (53.67 k allocations: 2.776 MiB)
Кроме того, первый раз, когда функция вызывается в julia, компилируется в машинный код, поэтому последующие операции выполняются быстро. повторное измерение времени:
julia> @time get_vinz(Ngal)
1 2 3 4 5 0.000639 seconds (50 allocations: 1.578 KiB)
Использование глобальных переменных - плохая практика в целом. рекомендуемый способ - передать эти значения в функцию