digitalmars.D.learn - does pointer refer to a heap object?
- Carl Sturtivant (4/4) Jul 27 2013 Given a pointer to a struct, is there a clean way to determine if
- Brad Anderson (16/20) Jul 27 2013 import core.memory, std.stdio;
- Carl Sturtivant (1/16) Jul 27 2013 Nice, does what I need. Thanks.
- David (6/30) Jul 27 2013 core.thread has a function "getStackTop" and "getStackBottom", comparing
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)?
Jul 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).
Jul 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.
Jul 27 2013
Am 27.07.2013 20:07, schrieb Brad Anderson:On Saturday, 27 July 2013 at 17:58:20 UTC, Carl Sturtivant wrote: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_stackBottomGiven 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).
Jul 27 2013