[Python-3000] PyUnicodeObject implementation
"Martin v. Löwis"
martin at v.loewis.de
Tue Sep 9 00:12:36 CEST 2008
> I wouldn't mind letting Cython special case subtypes of str (or unicode in
> Py3) *somehow*, as long as this "somewhow" proves to be a viable solution that
> only applies to exactly those types *and* can be done realiably for subtypes
> of subtypes. I'm just not aware of such a solution.
As people have pointed out: add new fields *after* the variable-sized
members. To access it, you need to compute the length of the base
object, and then cast the pointer to an extension struct.
That extends to further subtypes, too.
Access is slightly slower, i.e. it's not a compile-time constant, but
base_address + base_address[ob_len]*elem_size - more_fields_size
This still compiles efficiently, e.g. on x86, gcc compiles a struct
field access to
movl 20(%eax), %eax
and an access with a var-sized offset into
movl 8(%eax), %edx; fetch length into edx
movl -20(%eax,%edx,2), %eax; access 20-byte sized struct, assuming
elements of size 2
> This does sound interesting, but I will have to look into the implications. As
> I said, it has to be a viable solution without (noticeable) impact on other
> types. I'm not sure how this would interact with subtypes of subtypes, and
> what the memory layout would be in that case.
More information about the Python-3000