does pointer refer to a heap object?

David d at dav1d.de
Sat Jul 27 14:19:45 PDT 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


More information about the Digitalmars-d-learn mailing list