Running out of memory ctfe 16GB

ketmar via Digitalmars-d digitalmars-d at puremagic.com
Thu Apr 6 15:42:28 PDT 2017


H. S. Teoh wrote:

> On Fri, Apr 07, 2017 at 01:16:20AM +0300, ketmar via Digitalmars-d wrote:
>> Dmitry Olshansky wrote:
>> 
>>> 2) Instead of building out out big string try building each
>>> interface separately. If I'm not mistaken current CTFE will actually
>>> allocate a whole new array on each append and copy things.  Since it
>>> never deallocates building up a huge string by bits and pieces is a
>>> bad idea as it will leak the entire thing on each append.
>> or use `char[]` buffer instead, manually increasing it's size by some
>> step.  assigning to such array won't do any copies, so growing the
>> array by 32kb (or even several mb) steps will reduce memory footprint
>> for string builders considerably.
>
> Are you sure?  AFAIK, the current CTFE engine will copy values every
> time they are assigned, regardless of whether they are technically
> "mutable" or not.

i'm sure: i'm using this trick alot. without that, CTFE won't be able to 
correctly work with arrays at all, 'cause assigning to mutable array 
element should be visible with all other slices of that array.

sure, CTFE can technically allocate "hidden array object" and re-assign it 
each time, but it actually has a concept of "owned by CTFE" objects, and if 
the array was created in CTFE, it becomes owned by CTFE, and copies will be 
made only on array resize.


More information about the Digitalmars-d mailing list