---- Le ven., 26 févr. 2021 23:13:56 -0500 Jessica Clarke <jrt...@debian.org> écrit ---- > > The low 3 bits of the actual size are known to always be 0, so they > aren't stored and instead replaced with the 3 flags. The diagram > doesn't make that overly clear, but if you re-read all the text it > should. Pictorially (not to scale): > > +-------------------------+ > | Size in bytes | > | High bits of size |A|M|P| > +-------------------+-+-+-+ > > Alternatively, you can imagine that the value stored is indeed missing > 3 bits, but it's also stored with 3 extra bits shoved on the end; you > could then recover the original value by ((x >> 3) << 3), but that's > the same as (x & ~7). > > Jess > >
Oh, you means the size is always a multiple of 8. It make sense with: Alignment: 2 * sizeof(size_t) (default) (i.e., 8 byte alignment with 4byte size_t). This suffices for nearly all current machines and C compilers. However, you can define MALLOC_ALIGNMENT to be wider than this if necessary. I see... I kind of sad I did not make a great discovery.