c++11 enum syntax ok in DMD headers ?

Iain Buclaw ibuclaw at gdcproject.org
Sat Nov 23 14:09:45 UTC 2019


‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Saturday, 23 November 2019 13:54, S.G via D.gnu <d.gnu at puremagic.com> wrote:
> Thanks for the quick replying, even if a bit disapointing.
>
> The reason why I asked is because I'd like to avoid cases where
> the enum type is used directly and that creates an alignment
> issue that implies memory overhead, i.e
>
> enum SomeEnumeratedType // could be `ubyte` or `unsigned char`
> {
> member1, member2, member3
> }
>
> class Stuff
> {
> ubyte[7] allTheOtherMembers; //let's say
> SomeEnumeratedType someEnumeratedType // now a Stuff instance
> takes 16 bytes
> // because
> SomeEnumeratedType takes 4 bytes...
> }

Understood, however for AST data structures in the D language frontend, I don't think such field packing would really make any valuable difference on memory.  If the fields are arranged to not have a needless amount of alignment holes in the middle, such as:

class Expression
{
    ubyte op;
    // <-- up to 7 bytes padding inserted here.
    Type* type;
    ubyte size;
    ubyte parens;
    // <-- up to 6 bytes padding inserted here.
    Loc loc;
}

Then the best improvements one can make would be in relation to memory consumption is either better GC management or add more scope destruction (in my opinion).

--
Iain



More information about the D.gnu mailing list