代码之家  ›  专栏  ›  技术社区  ›  phg

如何处理python 3最大字符串大小?

  •  1
  • phg  · 技术社区  · 7 年前

    在64位python构建中, sys.maxsize 编号9223372036854775807 不过,译员抛出了一个 内存错误 如果我分配更多的字符串 比 内部最大值-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位。) 有足够的空闲内存和交换空间,因此我确信系统没有 达到任何身体极限。

    这里发生了什么?我如何增加这个上限?

    1 回复  |  直到 7 年前
        1
  •  1
  •   phg    7 年前

    决议:结果是 数据段大小限制

    $ ulimit -d
    4194304
    

    出于某种原因,这些4294967296 B转换为每个分配的2684354560 B 蟒蛇帽。

    将此值设置为 无限的 取下盖子。这可以在外部完成 通过父进程(例如 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 也影响匿名映射 解释了观察到的大型ISH分配失败和我的 惊讶。