[phobos] custom BlkAttr flags
Steve Schveighoffer
schveiguy at yahoo.com
Wed Jul 14 03:19:51 PDT 2010
No, because typeinfo has nothing to do with whether you allocated a block of
memory using an array allocation routine or GC.malloc.
I need a bit. I've used the next one in line, hopefully that's OK (the code is
already checked in).
-Steve
----- Original Message ----
> From: Sean Kelly <sean at invisibleduck.org>
> To: Discuss the phobos library for D <phobos at puremagic.com>
> Cc: Phobos <phobos at puremagic.com>
> Sent: Tue, July 13, 2010 8:21:45 PM
> Subject: Re: [phobos] custom BlkAttr flags
>
> The GC is going to need a bit of an overhaul to support finalization of structs
>anyway. Maybe this could be another use for the stored typeinfo.
>
>
> Sent from my iPhone
>
> On Jul 13, 2010, at 8:09 AM, Steve Schveighoffer <schveiguy at yahoo.com> wrote:
>
> > Currently, there is a problem in the runtime which can result in very odd
> > behavior. Let's say you declare a class like this:
> >
> > class C
> > {
> > int[1] x;
> > }
> >
> > Now, let's say you do something like this:
> >
> > auto c = new C;
> > auto x = c.x[];
> > x ~= 1;
> >
> > What happens here? Well, the memory for c and c.x are on the heap, so the
> > block allocated by c is considered for appending, and a "length" field is
>looked
>
> > at, even though that length is possibly garbage. The result is that it's
> > extremely improbable, but possible, that the append could happen in place if
>
> > that "length" happens to be correct (thereby overwriting other members of
>c). I
>
> > can't even begin to construct a case which shows this is possible, and it
>may
>
> > not even be, but I think this needs attention.
> >
> > In addition, if anyone allocates memory via GC.malloc, and then tries to
>append
>
> > to such memory, a similar problem occurs, because the allocation did not go
> > through the array allocation routine. This is more provable, but less
>likely to
>
> > happen (most people don't call GC.malloc). However, a place where I am most
>
> > concerned is closures, which I think call GC.malloc.
> >
> > What I propose to fix this is to allocate one of the block attribute flags
>to
>
> > designate that a block is appendable. The odd part about it, is that the GC
>is
>
> > not aware of appending, so it is somewhat of a "user-defined" flag.
> >
> > My question is, how should we declare the flag? I currently only defined it
>in
>
> > lifetime.d, outside the gc, but I'm thinking it should be defined in the GC
>as
>
> > well. Also, should I allocate the next bit, or one of the higher order
>bits?
> >
> > I'm going to check in my code that defines it in lifetime.d only, and
>depending
>
> > on the responses to this, I'll add it to the GC definition too.
> >
> > -Steve
> >
> >
> >
> >
> > _______________________________________________
> > phobos mailing list
> > phobos at puremagic.com
> > http://lists.puremagic.com/mailman/listinfo/phobos
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
>
More information about the phobos
mailing list