Memory Julia中的内存分配与线性系统求解

Memory Julia中的内存分配与线性系统求解,memory,julia,linear-algebra,Memory,Julia,Linear Algebra,我用的是Julia 1.5.0。考虑下面的代码: using LinearAlgebra using Distributions using BenchmarkTools function solve_b!(A, tol_iters) b = [1.0 2.0]' luA = lu!(A) x = [0.0; 0.0] for i =1:tol_iters A[1,1] += 0.001 A[2,2] += 0.001

我用的是Julia 1.5.0。考虑下面的代码:

using LinearAlgebra
using Distributions
using BenchmarkTools

function solve_b!(A, tol_iters)
    b   = [1.0 2.0]'
    luA = lu!(A)
    x   = [0.0; 0.0]
    for i =1:tol_iters
        A[1,1] += 0.001
        A[2,2] += 0.001
        luA = lu!(A)
        ldiv!(x, luA, b)
    end
end

A = rand(2,2)
solve_b!(A, 1000)
如果我使用
julia--track allocation=user
运行此程序,我会看到大部分内存分配来自
b=[1.0 2.0]'
x=[0.0;0.0]
。也就是说,当我看到.mem文件时,我看到以下内容:

内存分配随着I的增加而增加
tol\u iters

有人能解释一下原因吗?我正在使用
lu
ldiv,因此我希望更新能够到位。因此,不应该有任何与迭代次数相关的额外内存分配。

lu
进行分配,它只承诺通过使用
A
执行内部计算来减少分配量。@BogumiłKamiński所以没有办法改进此功能?如果我解线性系统,我必须分配?我认为通常的方法是先解一次问题,然后使用更新公式,如:@phipsgabler在我的实际代码中,矩阵的变化方式比示例代码更复杂。问题更多的是关于求解线性系统时Julia的内存分配。
   96     b   = [1.0 2.0]'
    0     luA = lu!(A)
   96     x   = [0.0; 0.0]