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.

Reply via email to