On Tuesday, 11 December 2012 at 18:11:32 UTC, Robert Jacques
wrote:
On Tue, 11 Dec 2012 11:25:44 -0600, Alex Rønne Petersen wrote:
Interior pointers are OK in the stack and registers, so taking
pointers to fields inside aggregates should be fine so long as
they are not stored in the heap.
So what about unions?
The pointer & lengths won't work well together if you mix them.
Consider.
struct S {
union {
int[] i;
byte[] b;
}
}
S s;
s.i.length = 4;
assert(s.i.length == 4);
assert(s.b.length == 16); //fails
assert(s.b.length == 4); //the implementation
s.b = cast(byte[]) s.i;
assert(s.b.length == 16); //true
assert(s.i.length == 4); //fails
assert(s.i.length == 16); //the implementation (last twelve
Sigfaults probably)
The only way to properly use that is to have one of the data
types you always convert from/to, but the GC wouldn't know and
might try them all; Although only the base pointer might be
considered so...