Thread overview
does pointer refer to a heap object?
Jul 27, 2013
Carl Sturtivant
Jul 27, 2013
Brad Anderson
Jul 27, 2013
Carl Sturtivant
Jul 27, 2013
David
July 27, 2013
Given a pointer to a struct, is there a clean way to determine if that struct is allocated on the heap or not? Or alternatively to determine whether it has finite or infinite lifetime (in TDPL speak)?



July 27, 2013
On Saturday, 27 July 2013 at 17:58:20 UTC, Carl Sturtivant wrote:
>
> Given a pointer to a struct, is there a clean way to determine if that struct is allocated on the heap or not? Or alternatively to determine whether it has finite or infinite lifetime (in TDPL speak)?

import core.memory, std.stdio;

struct A { }

void main()
{
    A a;
    auto ap = &a;

    auto bp = new A;

    writeln("ap", GC.addrOf(ap) ? "" : " not", " allocated with the GC");
    writeln("bp", GC.addrOf(bp) ? "" : " not", " allocated with the GC");
}


Note that the heap is more than just GC allocated memory.  C malloc allocates on the heap but would fail the above test (as it should).
July 27, 2013
>
> import core.memory, std.stdio;
>
> struct A { }
>
> void main()
> {
>     A a;
>     auto ap = &a;
>
>     auto bp = new A;
>
>     writeln("ap", GC.addrOf(ap) ? "" : " not", " allocated with the GC");
>     writeln("bp", GC.addrOf(bp) ? "" : " not", " allocated with the GC");
> }
>
>
> Note that the heap is more than just GC allocated memory.  C malloc allocates on the heap but would fail the above test (as it should).

Nice, does what I need. Thanks.
July 27, 2013
Am 27.07.2013 20:07, schrieb Brad Anderson:
> On Saturday, 27 July 2013 at 17:58:20 UTC, Carl Sturtivant wrote:
>>
>> Given a pointer to a struct, is there a clean way to determine if that struct is allocated on the heap or not? Or alternatively to determine whether it has finite or infinite lifetime (in TDPL speak)?
> 
> import core.memory, std.stdio;
> 
> struct A { }
> 
> void main()
> {
>     A a;
>     auto ap = &a;
> 
>     auto bp = new A;
> 
>     writeln("ap", GC.addrOf(ap) ? "" : " not", " allocated with the GC");
>     writeln("bp", GC.addrOf(bp) ? "" : " not", " allocated with the GC");
> }
> 
> 
> Note that the heap is more than just GC allocated memory.  C malloc allocates on the heap but would fail the above test (as it should).

core.thread has a function "getStackTop" and "getStackBottom", comparing pointers to the end of the stack (feteched like with the functions mentioned) should also work for malloc, but that's more of a hack.

PS: the not private functions are
thread_stackTop and thread_stackBottom