Почему существует одно распределение с маленькими векторами и два распределения с большими векторами?
Действительно, это не имеет значения, и это внутренняя деталь того, как работают массивы. По сути, в Julia Array
есть две части: внутренний заголовок (который отслеживает размерность массива, тип элемента и т. Д.) И сами данные. Когда массивы маленькие, есть преимущество в объединении этих двух сегментов данных, но когда массивы большие, есть преимущество в том, что они разделены. Это не вещательная вещь, это просто вещь распределения массива:
julia> f(n) = (@time Vector{Int}(undef, n); nothing)
f (generic function with 1 method)
julia> f(2048)
0.000003 seconds (1 allocation: 16.125 KiB)
julia> f(2049)
0.000003 seconds (2 allocations: 16.141 KiB)
Тогда, надеюсь, вы поймете, почему это приводит к удвоению количества выделений для больших массивов, когда задействованы временные ресурсы - есть один длязаголовок каждого массива и один для данных каждого массива.
Короче - не беспокойтесь о количестве выделений. Есть моменты, когда распределение может реально улучшить производительность. Однако, когда это необходимо, вы видите огромное количество выделений, особенно если вы видите, что они пропорциональны количеству элементов в массиве.