  The C programming language and its cousins such as C++ stipulate the static
storage of sets of structured data: Developers have to commit to one, invariant
data model -- typically a structure-of-arrays (SoA) or an array-of-structs
(AoS) -- unless they manually rearrange, i.e.~convert it throughout the
computation. Whether AoS or SoA is favourable depends on the execution context
and algorithm step. We propose a language extension based upon C++ attributes
through which developers can guide the compiler what memory arrangements are to
be used. The compiler can then automatically convert (parts of) the data into
the format of choice prior to a calculation and convert results back
afterwards. As all conversions are merely annotations, it is straightforward
for the developer to experiment with different storage formats and to pick
subsets of data that are subject to memory rearrangements. Our work implements
the annotations within Clang and demonstrates their potential impact through a
smoothed particle hydrodynamics (SPH) code.
