Memory 来自顶部和(房间)的SBCL已用内存报告不同

Memory 来自顶部和(房间)的SBCL已用内存报告不同,memory,lisp,common-lisp,sbcl,Memory,Lisp,Common Lisp,Sbcl,我正在Linux(Fedora15)32位系统(内核3.6.5)上运行SBCL 1.0.51,该系统具有1GB Ram和256MB交换空间 我启动sbcl--dynamic space size 125并开始调用一个函数,该函数向http(couchDB)服务器发出约10000个http请求(使用drakma),然后将返回数据的操作结果格式化为标准输出 每次通话后,我都会打一个(sb分机:gc:full t),然后再打(room)。结果并没有增长。无论我运行该函数多少次,(room)都会报告相同

我正在Linux(Fedora15)32位系统(内核3.6.5)上运行SBCL 1.0.51,该系统具有1GB Ram和256MB交换空间

我启动
sbcl--dynamic space size 125
并开始调用一个函数,该函数向http(couchDB)服务器发出约10000个http请求(使用drakma),然后将返回数据的操作结果格式化为标准输出

每次通话后,我都会打一个
(sb分机:gc:full t)
,然后再打
(room)
。结果并没有增长。无论我运行该函数多少次,
(room)
都会报告相同的已用空间(有一些起伏,但平均值不变)

但是:每次我调用函数后,top都会报告sbcl进程的VIRT和RES量不断增加,甚至超过了我告诉sbcl自行请求的125MB空间。因此,我有以下问题:

  • 为什么
    top
    -报告的内存一直在增长,而
    (room)
    说没有?我唯一能想到的就是通过外国金融机构的一些泄漏。我不是直接跟ffi打电话,但可能是一些drakma dep这样做了,忘记了释放它的C垃圾。不管怎样,我不知道这是否是一个解释。可能是别的什么吗?有什么见解吗
  • 为什么不尊重动态空间大小

  • 最好由SBCL专家在SBCL邮件中回答list@wvxvw:如果是碎片,那么(房间)报告也会增加,即使是一个小报告。如何在没有净内存消耗的情况下实现碎片化?据我所知,碎片意味着我分配X空间,然后释放Y空间,Y空间虽然是免费的,但无法使用(小碎片)。但在我的例子中,每次通话后,X等于Y,因为如果它们不相等,房间会报告一些增加。有趣的是,在这篇文章发表5年后,我遇到了类似的问题。只是想知道你解决了吗?我真的不记得了。我甚至不记得我是否真的解决了它,或者我只是没有去追求它。我没有在SBCL名单上问过这件事,我记得。