struct field alignment
Robert Jacques
sandford at jhu.edu
Sun Oct 17 20:31:26 PDT 2010
On Sun, 17 Oct 2010 22:00:49 -0400, Walter Bright
<newshound2 at digitalmars.com> wrote:
> http://www.digitalmars.com/d/2.0/attribute.html#align
>
> Over time, it has become clear to me that there are only two useful
> alignments:
>
> align // set to whatever the C ABI alignment is
> align(1) // pack everything in, no alignment padding
>
> I think any other alignments should be deprecated. Note that with
> align(1), any alignment is achievable simply by adding in byte fields
> where desired.
I mainly do GP-GPU work using NVIDIA's CUDA + D. Passing data into and out
of the GPU requires conforming to align(8) and align(16) structs as well
as structs that contain align(8)/align(16) structs. At first, I tried
using align(8)/align(16) + .alignof, only to find out that those weren't
supported. Currently, I use an enum flag and a bunch of packing/unpacking
routines in order to send/access data. Maintaining the correct alignment
with composite structs manually is a difficult/brittle endeavor; its fine
for interfacing with a stable code base, but not for development where
things are constantly changing. Also, CUDA requires that the programmer
maintain the proper function call alignment, adding another place where
one has to remember to pad correctly.
Although I have a solution that works well for me, the one thing I lament
about not having a canonical D way of expression align(8)/align(16), even
at only a meta-information level, is that if phobos gets a small vector
library, I can't use it and conversely I'm not motivated to improve/submit
my own small vector library to phobos.
More information about the Digitalmars-d
mailing list