◐ Shell
clean mode source ↗

bpo-27987: align PyGC_Head to alignof(long double) explicitly by methane · Pull Request #13336 · python/cpython

@methane

PyGC_Head consists two uintptr_t variables so it is aligned to 16 byte
on amd64 platform already.

This commit makes this alignment more explicit, although make code
bit ugly.

https://bugs.python.org/issue27987

vstinner

// Lowest two bits are used for flags documented later.
uintptr_t prev;
} _gc;
long double _dummy; /* for worst alignment */

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please elaborate the comment? Add "bpo-27987" and explain that x64-64 ABI requires to align on 16 bytes.

Do you have to align to 16 bytes on x86 (32-bit) as well?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh! I forgot about 32bit platform.
I thought this PR does nothing, but it makes PyGC_Head to 16 bytes from 8 bytes on x86 platform.

Maybe, we can use __attribute__ ((aligned)) if compiler is GCC or clang.

@vstinner

This commit makes this alignment more explicit, although make code bit ugly.

Said differently, it doesn't change PyGC_Head size on 64-bit system, right? Does it change the size on 32-bit system?

Correctness matters more than code beauty here ;-)