【问题标题】:Is there any way to get a variable address in Common Lisp?有没有办法在 Common Lisp 中获取变量地址?
【发布时间】:2016-02-21 11:01:42
【问题描述】:

我正在尝试在 Common Lisp 上实现 XOR 链接列表,但我需要获取变量的地址才能对其执行任何按位运算。 有没有办法获取变量的内存地址,类似于python的id()函数?

【问题讨论】:

  • 如果你需要像地址这样低级的东西,Common Lisp 不是合适的工具;但它是一个非常好的高级编程工具。为什么在 Lisp 中需要 XOR 链表?
  • 在 Common Lisp 中,变量的地址没有什么意义。变量通常只是指向对象的指针。
  • 垃圾收集可以移动东西,并且可以在实现需要时复制一些整体。因此,对于您正在尝试做的事情,没有可靠的地址感。
  • 您可能会发现 unrolled linked list 在 Common Lisp 中更容易实现,并且具有许多相同的内存优势。
  • @BasileStarynkevitch 实际上,我只是为了这样做而尝试这样做。我很感兴趣这是否可以在 lisp 中实现,以及实现起来有多难。

标签: lisp common-lisp memory-address xor-linkedlist


【解决方案1】:

如果您使用的是Allegro Common Lisp,也许这就是您正在寻找的: Escape from the Heap: Low-Level Programming in Common Lisp

【讨论】:

    【解决方案2】:

    通常,Common Lisp 中的内存管理是由某种Garbage Collector 执行的。其中许多算法在收集周期中移动内存中的对象。

    因此,您不能指望每个对象都有一个固定地址,因此标准中没有提供任何操作来获取 Common Lisp 对象的地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 2020-08-26
      相关资源
      最近更新 更多