Nicholas Clark's "Improve Perl 5" grant work
- Discovered that PVGVs use magic to perform stringification. Removed this
need for magic, saving 24 bytes.
- Discovered that pads use PVGVs for storing C variable names. Changed
C variables to be stored in PVMGs
- Moved the GP pointer to the SV head structure, saving 1 level of
dereferencing (and 4 bytes)
- Managed to merge in all the other fields of PVGVs into the fixed part of SV
structure common with all the smaller SVs. (saves 16 bytes)
- Change from storing the GV's name in a string to using a sharing the hash
key structure used by the symbol table holding this typeglob. (saves the
length of the typeglob name) [sizes for systems with 4 byte pointers and longs,
such as x86 and default PPC]
I think this roughly halves the size of PVGVs. For an example, the
installman script in the perl source tree uses over 1200 PVGVs, so
this saves about 50K.
PVLVs had no magic associated, but benefit from all the other savings.
I've completed the planned PVCV and PVFM shrinking. Both are now about 25%
smaller (eg 20 bytes). installman uses 600 PVCVs, so this saves about
Is anything known about performance improvements yet? I'm curious if there's extra speed in these changes as well as memory savings.