1

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

例子:

在此处输入图像描述

这是#x100cab066d1这里感兴趣的。

4

1 回答 1

5

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

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

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

使用apropos,我们很容易找到

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

PS。退房sxhash- 这可能是你要找的吗?

于 2018-05-30T21:15:03.623 回答