2017-07-14 48 views
2

我正在考虑使用大量的gensyms来区分我正在构建的系统中的对象(如erlang中的ref)。创建大量的gensyms是否合理?

我是否应该在创建大量gensyms后遇到系统限制?

仅供参考,我使用SBCL。

+3

会是一个大数目? –

+0

想做大胆的事吗?试试'(loop(prin1(gensym)))'。不要怪我。最终这个实验似乎表明,对于gensym数没有限制。此外,通过给出另一个符号作为参数,您总是可以替换['gensym'](http://clhs.lisp.se/Body/f_gensym.htm)的'G'。 – Mooncrater

+1

@Mooncrater'gensym'采用一个字符串或正整数。它可能在一些实现中使用符号,但它不是可移植的。 – Sylwester

回答

2

不同的实现使用不同数量的内存。从只测试gensym使用的字节数,它取决于你传递它的参数以及来自前一轮的独特性。

如果你有一个总是将固定数量的字符串传递给gensym的宏,它会每个使用0.5-1.5kB。对于每个连续使用相同的参数,其下降到65-150字节左右。

我把它制作了65个字节的gensyms一段时间,并停止它远高于40亿,但我不知道这是否合格,因为“大”是含糊不清的。

相关问题