Max Alekseyev on Sat, 23 Oct 2021 03:50:28 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: memory leak on concatenating two lists |
Le Tue, Oct 19, 2021 at 09:46:58AM -0400, Max Alekseyev a écrit :
> The following code illustrates the problem:
>
> {
> L = List();
> while(1,
> my( temp = List(vector(100,i,i)) );
> L = concat(L,temp);
> for(i=1,100, listpop(L));
> print1(getheap()," ",Strchr(13));
> );
> }
>
> While list L remains empty at the end of each while-loop iteration, the
> memory consumption grows indefinitely.
> If I replace "L = concat(L,temp);" with, say,
> for(i=1,#temp, listput(L,temp[i]));
> then memory consumption remains constant. However, this does not look like
> an efficient way to concatenate lists.
> Can concat() be fixed, or what would be an efficient and memory-safe
> approach here?
This should be fixed in master (d43896622).
You can work around it by doing
L = concat(L,Vec(temp));
or similar ways to avoid concatening two lists.
Thanks for detecting this issue!
Bill