内存 Common Lisp 中的对象地址

Mad*_*ist 1 sbcl common-lisp allegro-cl

我试图弄清楚像 SLIME 或 SLY 这样的软件如何在 Inspector 中显示变量时获取变量的内存地址。我可以使用什么 Common Lisp 函数来以编程方式执行此操作?

例子:

在此处输入图片说明

这是#x100cab066d1这里感兴趣的。

sds*_*sds 5

您不想:垃圾收集可能(并且经常这样做!)移动对象,因此对象的地址可能因观察而异。另一个问题是由直接对象(例如,1#\A)引起的 - 它们的地址是什么?!

也就是说,ANSI CL 提供了 大多数 lisps 解释为表示内存中当前地址的:identity参数 print-unreadable-object

唉,输出格式是依赖于实现的(例如,SBCL 将地址包装在 中{}),所以最好找到返回地址的特定于实现的函数。

使用apropos,我们很容易找到

  • system::address-of 在 CLISP 中;
  • sb-kernel:get-lisp-obj-address 在 SBCL 中。

附注。退房sxhash- 这可能是你正在寻找的吗?