メモリ

しばらく忙しくて何も出来なかった。
ちょっと思いつきで tagged pointer を配列で書いて見ているところ。secd vm

  • cons すると空きメモリが減っていく
  • alignment されていてアドレスの末尾 3bit を型情報につかう
  • 以下は (cons 4 (cons 1 3)) のつもり
SECD> (setq *vm* (make-vm))
#<vm:
 [0x00000048] FIXNUM | 0
 [0x00000040] FIXNUM | 0
 [0x00000038] FIXNUM | 0
 [0x00000030] FIXNUM | 0
 [0x00000028] FIXNUM | 0
 [0x00000020] FIXNUM | 0
 [0x00000018] FIXNUM | 0
 [0x00000010] FIXNUM | 0
 [0x00000008] FIXNUM | 0
*[0x00000000] FIXNUM | 0
>
SECD> (vm-cons *vm* (immediate-rep 1) (immediate-rep 3))
1
SECD> *vm*
#<vm:
 [0x00000048] FIXNUM | 0
 [0x00000040] FIXNUM | 0
 [0x00000038] FIXNUM | 0
 [0x00000030] FIXNUM | 0
 [0x00000028] FIXNUM | 0
 [0x00000020] FIXNUM | 0
 [0x00000018] FIXNUM | 0
*[0x00000010] FIXNUM | 0
 [0x00000008] FIXNUM | 3
 [0x00000000] FIXNUM | 1
>
SECD> (vm-cons *vm* (immediate-rep 4) 1)
17
SECD> *vm*
#<vm:
 [0x00000048] FIXNUM | 0
 [0x00000040] FIXNUM | 0
 [0x00000038] FIXNUM | 0
 [0x00000030] FIXNUM | 0
 [0x00000028] FIXNUM | 0
*[0x00000020] FIXNUM | 0
 [0x00000018] PAIR   | 0
 [0x00000010] FIXNUM | 4
 [0x00000008] FIXNUM | 3
 [0x00000000] FIXNUM | 1
>
SECD>