Hmmm... Are you implying that by default key values are already shared? As this code in sv.c seems to imply:
register HV *hv;
register XPVHV* xhv;
hv = (HV*)NEWSV(502,0);
sv_upgrade((SV *)hv, SVt_PVHV);
xhv = (XPVHV*)SvANY(hv);
HvSHAREKEYS_on(hv); /* key-sharing on by default */
But I assume then that what is being shared, are char * rather than SV's? And sharing between different hashes doesn't really solve my optimization "problem", as I only want to use one hash. It's just that in many cases the value is the same as the key, and that it would therefore make sense to have them share the same SV.