内存中的对象地址Common Lisp

时间:2018-05-30 20:34:00

标签: common-lisp sbcl allegro-cl

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

示例:

enter image description here

这里感兴趣的是#x100cab066d1

1 个答案:

答案 0 :(得分:4)

您不想:垃圾收集可能(通常会!)移动对象,因此对象的地址可能在观察之间不同。 另一个问题是由直接对象(例如1#\A)构成的 - 他们的地址是什么?!

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

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

使用apropos,我们很容易找到

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

PS。查看sxhash - 可以 那就是你要找的东西?