On Thursday, 6 April 2017 at 22:42:28 UTC, ketmar wrote:
H. S. Teoh wrote:

On Fri, Apr 07, 2017 at 01:16:20AM +0300, ketmar via Digitalmars-d wrote:
Dmitry Olshansky wrote:

[...]
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.

How to implement trick is this and are you 100% sure it works?

e.g.,

char[] x;

x.length = 65536;
x.length = 0;

?

If if what you say is correct it should solve my memory problem. I do a lot of string appending and memory usage seems to grows exponentially.






Reply via email to