Julia如何创建固定长度的数组?

对于数据量是明确的,数组可以是固定长度,使用 Vector 很方便,但是既然确定了长度,那么使用 Vector{T}(undef, 7) 这种方式来创建一维向量是否能提高内存的利用率?

# ~ 确定这个结构体只能存两个数
mutable struct IntDiff <: Compound
    comps::Vector{Term}
    function IntDiff(t1, t2)
        args = Vector{Term}(undef, 2)
        @inbounds args[1] = t1
        @inbounds args[2] = t2
        new(args)
    end
end

这样子和直接 IntDiff([a,b]) 比起来会有内存利用方面的提升么?还是多此一举?
emm,我 benchmark 跑了一遍,确实是多此一举,甚至 new([a,b])这样还快 1ns :joy:

1 个赞

比较建议 zeros(T, 7),通常 zeros 性能还不错,不比 undef

1 个赞

主要是存储的是自定义的结构体,不提供初始值。

你要不去看下结构体的内部构造方法new,这个能解决你的问题

1 个赞

我不知道在源码的哪个地方,但是我看到 Vector{T}() = Vector{T}(undef, 0) 这就是了,不指定个数,那么使用 push! 就只是盲目地给你分配内存,当然 Julia 有自己的内存扩展策略。

julia的数组是mutable的。
定长数组可以使用StaticArray,对效率的提升与数组长度有关。