Memory management - Heap memory is allocated and managed in some
complex ways in an effort to support garbage collection and threads.
Efforts at efficiency have resulted in code that is dependent upon
32-bits control words that are manipulated as integers on byte
boundaries and addressed via byte pointers.
There are places within source code where low order 3 bits are zeroed out,
then data flags saved in these zeroed out bits, this method doesn't work
properly when you have a word size that is multiple's of 6, becuase they
have 48 bit tagged words, so they use 24 bits. (also, Unisys (MN) has 2 word
pointers and 8 word function pointers). So the assumptions we are making
about shifting the low order three bits and storing data into those bits
doesn't mapped well to their architecture. They have 24 bits starting
at the beginning of words in order to use bottom 3 bits as a flag.
i.e. They have space at the top of the pointer to use.
- Bottom line is the definition of the flag bits should be in system
specific macros that they can modify.
complex ways in an effort to support garbage collection and threads.
Efforts at efficiency have resulted in code that is dependent upon
32-bits control words that are manipulated as integers on byte
boundaries and addressed via byte pointers.
There are places within source code where low order 3 bits are zeroed out,
then data flags saved in these zeroed out bits, this method doesn't work
properly when you have a word size that is multiple's of 6, becuase they
have 48 bit tagged words, so they use 24 bits. (also, Unisys (MN) has 2 word
pointers and 8 word function pointers). So the assumptions we are making
about shifting the low order three bits and storing data into those bits
doesn't mapped well to their architecture. They have 24 bits starting
at the beginning of words in order to use bottom 3 bits as a flag.
i.e. They have space at the top of the pointer to use.
- Bottom line is the definition of the flag bits should be in system
specific macros that they can modify.