Адрес объекта в памяти Common Lisp - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь выяснить, как программное обеспечение, такое как SLIME или SLY, получает адреса памяти переменных при отображении их в Инспекторе.Какую функцию Common Lisp я могу использовать, чтобы иметь возможность делать это программно?

Пример:

enter image description here

Это #x100cab066d1это представляет интерес здесь.

1 Ответ

0 голосов
/ 31 мая 2018

Вы не хотите: сборщик мусора может (и часто делает!) Перемещать объекты, поэтому адрес объекта может отличаться между наблюдениями.Другая проблема связана с непосредственными объектами (например, 1 или #\A) - какими будут их адреса?!

При этом ANSI CL предлагает аргумент :identity для print-unreadable-object, который большинство интерпретирует как текущий адрес в памяти.

Увы, формат вывода зависит от реализации (например, SBCL переносит адрес в {}), поэтому лучше найтизависящая от реализации функция, которая возвращает адрес.

Используя apropos, мы легко находим

  • system::address-of в CLISP;
  • sb-kernel:get-lisp-obj-address в SBCL.

PS.Проверьте sxhash - это то, что вы ищете?

...