【发布时间】:2011-08-23 05:43:01
【问题描述】:
基本上我不会在这里发布所有代码,但我会提供一个通用示例。我有一个类,它具有运行和创建大量值的函数。根据我的估计,这个数组不应该超过 10MB。在函数中,它会创建新的并修改应该在 train 中的函数运行后收集的数组。除了放入大数组的返回 tempArray 之外,它们不会在其他地方使用。这是重复的。使用的内存不断增长。我的代码是否存在问题或解决此问题的方法。我在这里阅读了有关 Linux 中 malloc 的内存泄漏的信息: http://pushingtheweb.com/2010/06/python-and-tcmalloc/.
【问题讨论】:
-
10MB?在 32 位平台上,1000*1000*10*20*4(每个 int 4 字节)= 800MB。如果您的系统是 64 位,则加倍。
-
我的错误,numpy.zeros 默认使用 float64。所以在任何平台上都是 1.6GB。 docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html
-
您可以使用
zeros((1000,1000,10,20), dtype=float32)将其大小保持在800MB -
请展示一个可运行的示例。也许您的估计值有误?
-
如果您无法共享您的代码,请创建一个可运行的示例(最好是简短的),它会导致与您相同的问题。重新告诉我们您的代码做了什么并不能帮助我们找出问题所在。您可能有错误,或者可能存在错误,但没有任何代码来重现该问题,我们只能说“嗯,它对我来说很好”。
标签: python numpy malloc scipy tcmalloc