我正在试图弄清楚像SLIME或SLY这样的软件是如何在Inspector中显示变量时获取变量的内存地址的。我可以使用哪个Common Lisp函数来以编程方式完成此操作?
示例:
这里感兴趣的是#x100cab066d1
。
发布于 2018-05-31 05:15:04
您不想这样做:垃圾收集可能(而且经常是这样做的!)移动对象,因此对象的地址在不同的观测值之间可能不同。另一个问题是直接对象(例如,1
或#\A
) --它们的地址是什么?!
也就是说,ANSI CL向print-unreadable-object
提供了:identity
参数,大多数lisps将该参数解释为内存中的当前地址。
遗憾的是,输出格式依赖于实现(例如,SBCL将地址包装在{}
中),因此最好找到返回地址的特定于实现的函数。
使用apropos
,我们可以很容易地找到
SBCL中CLISP;
sb-kernel:get-lisp-obj-address
中的system::address-of
。PS。查看sxhash
--这可能是你正在寻找的吗?
https://stackoverflow.com/questions/50612953
复制相似问题