python2.7内存限制释放

时间:2017-09-06 02:00:46

标签: python python-2.7

我想要一个Giga字节数据字符串。

使用此代码

length = 0x20000000

payload = ''.join(random.choice(string.printable) for _ in range(length))

但python除外并打印此错误“MemoryError”

完整的错误消息:

payload = ''.join(random.choice(string.printable) for _ in range(length))
MemoryError

我在堆栈溢出中发现了这个例外情况。

使用“import sys,sys.setrecursionlimit(10 ** 6)”将修复它!

所以,我添加了这段代码。

但没有解决!!

我无法“导入资源”。因为,不能不安装..

1 个答案:

答案 0 :(得分:1)

我认为最好的选择是使用barray = bytearray() length = 0x20000000 for _ in range(length): barray.append(random.choice(string.printable))

list

这只耗费了我机器上的0.5演出。

注意,增加递归限制对你没有帮助,实际上根本就没有使用递归。你只是制作非常大的东西。只有由''.join创建的{{1>}基础基础的指针数组将需要大约0x20000000 * 8 * 1e-9 == 4.294967296千兆字节,并且不计算中的字符串list本身,每个都需要一个完整的python对象,每个对象另外40个左右的字节,所以你看,你刚刚耗尽了内存。因此,请考虑您的个别字符串对象:

>>> 0x20000000 * (48) * 1e-9
25.769803776000003

所以你需要超过20场演出!可以在一些现代笔记本电脑上使用,但8次演出肯定是不够的。