我创建了一个无限循环来尝试用字符串填充RAM。但是,我得到了#34;内存超过"错误非常快,我认为这是Python中的一些预防性方法来阻止这种情况发生。有没有办法改变这种无限循环以绕过预防方法?还是一种关掉它的方法?这是我的循环:
array = []
while True:
array.append('test')
答案 0 :(得分:1)
很快意味着什么?
让我们假设创建和附加该字符串大约是200个字节(假设8位地址,以及PyObject
中所需的指针来支配内存使用情况),然后填充让我们说8GB RAM == 2**3 * 2**30 B
将在您的循环中进行1/25 * 2**30 ~= 40 * 2**20 ~= 40 millons
次迭代 - 这可能只需要几秒钟。
编辑:看看实际的CPython 2.7实现。为空列表产生40B空间,每个元素加上8B。因此,这需要10亿次迭代才能占用8GB的Ram,不计算字符串对象。
EDIT2:在我旧的笔记本电脑上试过这个;消耗大约16MB / s,考虑到8B /迭代方法,这意味着python每秒进行2e6循环迭代。尼斯!
EDIT3:您的计算机速度非常快,或者您的内存非常少。