[PATCH] RFC: use C11 alignas instead of GCC attribute aligned

Bruce Richardson bruce.richardson at intel.com
Tue Jan 30 18:59:25 CET 2024


On Tue, Jan 30, 2024 at 09:39:28AM -0800, Tyler Retzlaff wrote:
> On Tue, Jan 30, 2024 at 09:08:21AM +0100, Mattias Rönnblom wrote:
<snip>
> > 
> > Sorry if I've missed some discussion on the list, but the current
> > pattern of putting __rte_aligned(X) at the end doesn't work with MSVC,
> > or why are we doing this? C11 purism doesn't seem like much of a
> > driving force.
> 
> __rte_aligned(X) at the end doesn't work with MSVC __declspec(align(n))
> 
> > 
> > If one defined a macro as __declspec(align(X)) on MSVC and
> > __attribute__(__aligned__(X)) on other compilers, could it do the work
> > of both the above RTE_ALIGNAS() and RTE_ALIGN_TYPE()?
> > 
> > <a> struct <b> { int a; } <c>;
> 
> yes for struct/union. but only when placed at location you mark as <b>
> when compiling both C and C++ for all toolchains.
> 
I can see this restriction on placement potentially causing problems. Maybe
we should consider defining macros with the "struct" keywork included. For
example, (using gcc attributes here):

#define rte_aligned_struct(n) struct __attribute((aligned(n)))

rte_aligned_struct my_struct {
	int a;
}

Probably that's taking things a bit far away from standard C, but it may
cut down on placement errors.

/Bruce


More information about the dev mailing list