RE: using typedef to create aligned types

"Andras Balogh" <[email protected]> Wed, 1 Dec 2004 16:30:22 -0800
Newsgroups gmane.games.devel.windows
Message-ID <[email protected]>
Let Fred be:

class Fred {
public:
	int helloiamfred;
};

then sizeof(Fred) will be 4

but if I align the same class to 16 bytes:

class __declspec(align(16)) Fred {
public:
	int helloiamfred;
};

then sizeof(Fred) will be 16!!!

The reason is that if you want an array of Freds, each have to be aligned,
so it's not just the base address, that's changed, but the padding too!

Look here for more info and examples:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccelng/htm
/msmod_18.asp



Andras


> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of
> Brett Bibby
> Sent: Wednesday, December 01, 2004 4:12 PM
> To: [email protected]
> Subject: Re: [GD-Windows] using typedef to create aligned types
> 
> Not sure what kind of type Fred is, but Fred and Fred Aligned are the same
> type, thus the same size.  They just _start_ at an aligned location in
> RAM.
> If Fred is a struct, your alignment doesn't say anything about the
> alignment
> of each element _within_ the struct.  If Fred is an element of a struct,
> then that would effect the size of the struct it is contained within.
> 
> If you are trying to align data within structs, it's better to pack them
> nicely and align the struct start address than peppering code with
> alignments everywhere.  There's a presentation about cache issues you
> might
> want to check out:
> 
> http://www.gdconf.com/archives/2003/Ericson_Christer.ppt
> 
> -Brett
> 
> ----- Original Message -----
> From: "Andras Balogh" <[email protected]>
> To: <[email protected]>
> Sent: Thursday, December 02, 2004 7:45 AM
> Subject: [GD-Windows] using typedef to create aligned types
> 
> 
> > MSDN says that I can use typedef to make aligned versions of my types,
> eg:
> >
> > typedef __declspec(align(16)) Fred FredAligned16;
> >
> > This works when I declare variables, eg:
> >
> > Fred fred1;
> > FredAligned16 fred2;
> >
> > fred2 is 16 bytes aligned, while fred1 is not
> >
> > But the strange thing is that sizeof(Fred) == sizeof(FredAligned16) is
> > true,
> > even though Fred's size is not a multiple of 16 bytes...
> >
> > When I declare different types (ie. not using typedef), then the sizeof
> > will
> > be different because the aligned type will be padded to the next
> multiple
> > of
> > 16 bytes.
> >
> > Is this a bug in the compiler??
> >
> >
> >
> > Thanks,
> >
> > Andras
> >
> >
> >
> >
> > -------------------------------------------------------
> > SF email is sponsored by - The IT Product Guide
> > Read honest & candid reviews on hundreds of IT Products from real users.
> > Discover which products truly live up to the hype. Start reading now.
> > http://productguide.itmanagersjournal.com/
> > _______________________________________________
> > Gamedevlists-windows mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/gamedevlists-windows
> > Archives:
> > http://sourceforge.net/mailarchive/forum.php?forum_id=555
> >
> 
> 
> 
> -------------------------------------------------------
> SF email is sponsored by - The IT Product Guide
> Read honest & candid reviews on hundreds of IT Products from real users.
> Discover which products truly live up to the hype. Start reading now.
> http://productguide.itmanagersjournal.com/
> _______________________________________________
> Gamedevlists-windows mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/gamedevlists-windows
> Archives:
> http://sourceforge.net/mailarchive/forum.php?forum_id=555




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now. 
http://productguide.itmanagersjournal.com/
_______________________________________________
Gamedevlists-windows mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gamedevlists-windows
Archives:
http://sourceforge.net/mailarchive/forum.php?forum_id=555