Data-Flow (Escape) Analysis to Aid in Avoiding GC
Tobias Pankrath via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Feb 13 04:50:13 PST 2015
On Friday, 13 February 2015 at 12:40:57 UTC, Per Nordlöw wrote:
> On Friday, 13 February 2015 at 11:52:50 UTC, Tobias Pankrath
> wrote:
>> On Friday, 13 February 2015 at 11:34:50 UTC, Per Nordlöw wrote:
>>> On Friday, 13 February 2015 at 09:13:48 UTC, Kagamin wrote:
>>>> Whether s.front uses GC is determined by s.front
>>>> implementation, caller can't affect it.
>>>
>>> Compiling
>>>
>>> https://github.com/nordlow/justd/blob/master/t_splitter.d
>>>
>>> with -vgc on dmd git master gives no warnings about GC
>>> allocations!
>>>
>>> Is this really true!?
>>
>> Why should splitter.front allocate?
>
> Ahh, I think I understand now. I thought that slice creations
> ment GC-allocation but it doesn't right? It just increases a
> reference counter somewhere and creates a stack context for the
> slice right?
There are no reference counts involved, just simple arithmetic.
string a = "abc";
string b = a[1 .. $];
struct Slice(T) { T* ptr; size_t length };
Slice!char a = { <ptr_to_constant, 3 }
Slice!char b = { a.ptr + 1, 2 }
> But what about to!string in
>
> auto x = line.strip.splitter!isWhite.joiner("_").to!string;
>
> ?
That needs to allocate.
Probably -vgc only lists GC allocation inside the current scope
and doesn't look inside called functions. For this, there is
@nogc.
More information about the Digitalmars-d-learn
mailing list