testing if data is allocated on the stack or heap
Biotronic
simen.kjaras at gmail.com
Tue Oct 17 17:27:17 UTC 2017
On Tuesday, 17 October 2017 at 15:33:02 UTC, drug wrote:
> My code fails and I guess the reason is I have a slice to data
> in the stack and it becomes garbage in some moment. So I need a
> way to check where data is placed. Is it right that it can be
> done in linux using `sbrk` so that if the addr of data is less
> than `sbrk(0)` returning then data is on the stack and on the
> heap in other case?
I have very little knowledge about sbrk, so here's my solution.
Tested on win32 and win64.
module stackCheck;
private size_t stackStart;
enum size_t pageSize = 0x1000;
static this() {
import core.stdc.stdlib : alloca;
stackStart = cast(size_t)alloca(size_t.sizeof) &
~(pageSize-1);
}
bool onStack(void* p) {
size_t end = (cast(size_t)&p & ~(pageSize-1)) + pageSize;
size_t pp = cast(size_t)p;
if (end > stackStart) {
return pp >= stackStart && pp <= end;
} else {
return pp <= stackStart && pp >= end;
}
}
bool onStack(T)(ref T p) {
return (&p).onStack;
}
unittest {
int n;
int* p = new int;
assert(n.onStack);
assert(!p.onStack);
}
--
Biotronic
More information about the Digitalmars-d-learn
mailing list