【问题标题】:Is it reasonable to create large numbers of gensyms?创建大量 gensyms 是否合理?
【发布时间】:2017-07-14 18:45:10
【问题描述】:

我正在考虑使用大量 gensym 来区分我正在构建的系统中的对象(例如 erlang 中的 refs)。

我应该在创建大量 gensym 后遇到系统限制吗?

作为参考,我正在使用 SBCL。

【问题讨论】:

  • 什么是大数?
  • 想做一些大胆的事情吗?试试(loop (prin1 (gensym)))。不要怪我。最终,这个实验似乎表明 gensym 数没有限制。此外,您始终可以通过将另一个符号作为参数来替换gensymG
  • @Mooncrater gensym 采用字符串或正整数。它可能在某些实现中与符号一起使用,但它不是可移植的。
  • CL 中的符号通常是相当大的对象。如果你只是想要很多独特的 cookie,那么(cons nil nil) 是一个很好的方法—— conses 通常是两个词,几乎可以做到最小。

标签: lisp common-lisp symbols sbcl


【解决方案1】:

不同的实现使用不同的内存量。从仅测试 gensym 使用的字节数来看,它取决于您传递的参数以及前几轮的独特性..

如果您有一个始终将固定数量的字符串传递给gensym 的宏,它将使用每个 0,5-1,5kB。对于每个连续使用相同的参数,它会减少到 65-150 个字节左右。

我让它制作了 65 字节的 gensyms 有一段时间,然后将其停止在 40 亿以上,但我不知道这是否符合条件,因为“大”是模棱两可的。

【讨论】:

    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多