Memory is building up after matric inversion in Armadillo (C++)

I am working with Armadillo and there seems to be some weird memory management in my program.
I need to solve a matrix system recursively, and for this I call the following function in a for-loop :

void get_T(arma::cx_vec &T, arma::mat M0, arma::vec Q, int dim, int nmem){

    int n;
    n = pow(2 * dim, nmem);

    arma::cx_mat M(n, n);
    arma::cx_mat P(n, n);
    arma::cx_mat InvP(n, n);
    arma::vec U(n);

    for (int i = 0; i < n; i++)
    {
        U(i) = 1;
        for (int j = 0; j < n; j++)
        {
            M(i, j) = std::complex<double>(0, 0);
            P(i, j) = std::complex<double>(0, 0);
            InvP(i, j) = std::complex<double>(0, 0);
        }
    }

    get_M(M, M0, Q, dim, nmem);
    P = arma::eye(n, n) - M;
    InvP = P.i();
    T = InvP * U;
}

I checked the overall RSS memory taken by the entire program, and it seems that the step involving P.i() increases the amount of memory used (which makes sense), but it does not free it when the program exits the get_T function. So the overall memory keeps increasing as the for-loop continues, which in the end leads to a huge amount of memory required. How can I fix this ? I read that Armadillo cleans up memory every time it exits a function, but it does not seem to do it here.

Thanks for helping !

Source: Windows Questions C++

LEAVE A COMMENT