[Python-Dev] How can we use 48bit pointer safely? (original) (raw)
INADA Naoki songofacandy at gmail.com
Fri Mar 30 02:28:47 EDT 2018
- Previous message (by thread): [Python-Dev] [RELEASE] Python 3.7.0b3 is now available for testing
- Next message (by thread): [Python-Dev] How can we use 48bit pointer safely?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi,
As far as I know, most amd64 and arm64 systems use only 48bit address spaces. (except [1])
[1] https://software.intel.com/sites/default/files/managed/2b/80/5-level_paging_white_paper.pdf
It means there are some chance to compact some data structures. I point two examples below.
My question is; can we use 48bit pointer safely? It depends on CPU architecture & OS memory map. Maybe, configure option which is available on only (amd64, amd64) * (Linux, Windows, macOS)?
Possible optimizations by 48bit pointer
PyASCIIObject
[snip] unsigned int ready:1; /* Padding to ensure that PyUnicode_DATA() is always aligned to 4 bytes (see issue #19537 on m68k). */ unsigned int :24; } state; wchar_t wstr; / wchar_t representation (null-terminated) */ } PyASCIIObject;
Currently, state is 8bit + 24bit padding. I think we can pack state and wstr in 64bit.
PyDictKeyEntry
typedef struct { /* Cached hash code of me_key. */ Py_hash_t me_hash; PyObject *me_key; PyObject me_value; / This field is only meaningful for combined tables */ } PyDictKeyEntry;
There are chance to compact it: Use only 32bit for hash and 48bit*2 for key and value. CompactEntry may be 16byte instead of 24byte.
Regards,
INADA Naoki <songofacandy at gmail.com>
- Previous message (by thread): [Python-Dev] [RELEASE] Python 3.7.0b3 is now available for testing
- Next message (by thread): [Python-Dev] How can we use 48bit pointer safely?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]