in reply to Understanding Devel::Peek output

In general an SV consists of two parts: a head, containing some flags, a reference count and a pointer to the second part: a body, containing various type-specific fields; for example a PV body contains a size, current length and a pointer to a string.

In fact as an optimisation the head contains one extra general-purpose field, which can hold a pointer, or an IV or whatever. The presence of this field means that for "small" SVs like IVs, a body doesn't have to be allocated. In this case, the head's "pointer to body" in fact points back to itself, but possibly with a small offset to make the alignment of an IV in a body (xiv_u.xivu_iv) the same as the alignment for an IV value in the head (sv_u.svu_iv).

Dave.