[Python-Dev] How can we use 48bit pointer safely?

2018年3月29日 23:31:56 -0700

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 <[email protected]>
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to