我在使用FreeBSD的 python字符串观察一个奇怪的内存使用模式。考虑 下面的会议。想法是创建一个列表,其中包含一些 字符串,以便列表中的累积字符为100MB。FreeBSD上的Python字符串内存使用情况
l = []
for i in xrange(100000):
l.append(str(i) * (1000/len(str(i))))
这个使用了大约100MB的内存,'del l'会清除它。
l = []
for i in xrange(20000):
l.append(str(i) * (5000/len(str(i))))
这是使用165MB的内存。我真的不明白 额外的内存使用来自何处。 [两个列表的大小相同]
FreeBSD上的Python 2.6.4 7.2。在Linux/windows上都使用 只有100MB内存。
更新:我使用'ps aux'测量内存。这可以在上面的代码片段之后使用os.sytem来执行。这些也分开执行。
Update2:看起来像freebsd mallocs内存的倍数为2.因此分配5KB实际上分配8KB。虽然我不确定。
什么第一执行第二一段代码然后执行第一个?我再次考虑它将是165 MB,因为这涉及操作系统/ python解释器和垃圾回收器如何管理内存。 – Hossein 2011-03-17 17:14:54
你如何确定它使用的内存?你确定它是正确的吗? – steabert 2011-03-17 17:28:32