使用Python中的无限循环来泛洪RAM

时间:2015-02-20 10:29:12

标签: python infinite-loop

我创建了一个无限循环来尝试用字符串填充RAM。但是,我得到了#34;内存超过"错误非常快,我认为这是Python中的一些预防性方法来阻止这种情况发生。有没有办法改变这种无限循环以绕过预防方法?还是一种关掉它的方法?这是我的循环:

array = []

while True:
    array.append('test')

1 个答案:

答案 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:您的计算机速度非常快,或者您的内存非常少。