
For that reason, I don't like the addition of the opaque header too much. If there were an option to make the header explicit, we would not have to round up the object size to a multiple of (8, 16), but could arrange embedded doubles as they fit the best.
We could add the gc head *after* the object head. However, this will require manual changes to all types that support GC, so we can't do that before Python 4.
(I disagree, however, that we should remove the "long double". After all, we also want alignment of PyObjects to allow inclusion of a "long double" in them)
Well, I doubt that a 12 byte long double causes any other alignment but 4.
What you apparently fail to understand is this: On some platforms, sizeof(long double) == 16, and alignof(long double) == 16. It is these platforms why we need to keep the long double. Regards, Martin