Адрес объекта в памяти Common Lisp

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

Пример:

введите описание изображения здесь

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

1 ответ

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

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

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

С помощью apropos мы легко находим

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

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

Другие вопросы по тегам