ToDo:
内部実装を確認したところ、参照動作時にpack表現内部のreference位置とheap/stack系のreference位置が同一視できることを前提にコーディングされている
アドレス空間を分離する為に再実装するのであれば、pack表現も見直した方が良い模様
多分、stdint.h + union + switchで Cで書き直す方が移植性的には素直
オブジェクトキャッシュの実装は、SAD stack or Heapは考えておくべき (最悪、リストの長さの合計スケールのstackが必要) dump側で辞書領域の大きさを書き出しておくと、 restore側は辞書のrealllocationが不要になる
少なくとも型フィールドが余っているので、リストの種別毎にデータ構造を分離する(List of Reals, List of Non-Real, Generic List)することで、特化リストの格納効率を上げられる(iad/iavが不要になる)
また、混合リスト時の表現もReal型フラグベクトルを導入すると圧縮出来る
uint64_tにするか uint32_t 2語でデザインするかは一考
unit64_tだとイテレータループが単純になるが、32bit環境だと型が存在しない可能性がある
長いリストの場合、64要素当たり 64 * 16bytes -> 8 + 64 * 8bytes 短いリストの場合、2要素の時 2 * 16bytes -> 8 + 1 * 8bytes (1要素の場合は、自明なリスト構造)
recall動作時に型判定・再帰動作を含むループを回しているので、動作効率面での劣化は、フラグベクトルの条件判定分のみと推定される
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記