我试图找出像SLIME或SLY这样的软件如何获取变量的内存地址,因为它在Inspector中显示它们。我可以使用什么Common Lisp函数以编程方式执行此操作?
示例:
这里感兴趣的是#x100cab066d1
。
答案 0 :(得分:4)
您不想:垃圾收集可能(通常会!)移动对象,因此对象的地址可能在观察之间不同。
另一个问题是由直接对象(例如1
或#\A
)构成的 - 他们的地址是什么?!
也就是说,ANSI CL提供:identity
参数
print-unreadable-object
其中大多数lisps解释为内存中的当前地址。
唉,输出格式与实现有关(例如,SBCL包装
{}
)中的地址,所以最好找到
返回地址的特定于实现的函数。
使用apropos
,我们很容易找到
system::address-of
; sb-kernel:get-lisp-obj-address
在SBCL。 PS。查看sxhash
- 可以
那就是你要找的东西?