Skip to content

bpo-27987: align PyGC_Head to alignof(long double) explicitly#13336

Closed
methane wants to merge 1 commit intopython:masterfrom
methane:align-gchead
Closed

bpo-27987: align PyGC_Head to alignof(long double) explicitly#13336
methane wants to merge 1 commit intopython:masterfrom
methane:align-gchead

Conversation

@methane
Copy link
Copy Markdown
Member

@methane methane commented May 15, 2019

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

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

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?

Copy link
Copy Markdown
Member Author

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
Copy link
Copy Markdown
Member

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 ;-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants