如何解决Python 3最大字符串大小?

时间:2018-09-25 07:32:21

标签: python-3.x out-of-memory limit

在具有sys.maxsize为9223372036854775807的64位Python构建上, 但是,如果我分配更多的字符串,解释器会抛出 MemoryError INT_MAX-512 MiB 字符:

$ python3
#Python 3.6.6 (default, Jul 19 2018, 14:25:17) 
[GCC 8.1.1 20180712 (Red Hat 8.1.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = "*" * 2684354560
>>> s = "*" * 2684354561
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError

(元素类型绝对为8位的 bytes 的限制是相同的。) 有足够的可用内存和交换空间,所以我确定系统不是 达到任何身体极限。

这是怎么回事,我该如何提高上限?

1 个答案:

答案 0 :(得分:1)

分辨率:原来是 数据段大小限制

$ ulimit -d
4194304

由于某些原因,这些4294967296 B转换为每个分配2684354560 B 上限。

将此值设置为 unlimited 即可删除上限。这可以在外部完成 通过父进程(例如来自外壳程序的ulimit -d unlimited)或 在Python本身中使用 wrapper library for resource.h

resource.setrlimit (resource.RLIMIT_DATA,
                    (resource.RLIM_INFINITY
                    ,resource.RLIM_INFINITY))

Apparently上的更多内容 最近的内核(4.7和更高版本)RLIMIT_DATA也会影响匿名映射, 解释了观察到的大量分配失败和我的存在 惊讶。