5

我现在使用 cython 读取输入文件,将字符串转换为 int 并将它们存储在 ac 数组(而不是列表)中以节省空间。我的代码如下所示:

cdef long p[10000000]
cdef long i
i = 0
f = open(filename, 'r')
for line in f:
    temp = map(int, line.split())
    p[i] = temp[0]
    i = i + 1
f.close()

但是,当我引用数组 p 时,程序总是中止。不知何故,数组没有“定义”,因为内存使用率非常低。但是,如果我这样做,它可以工作

cdef i
for i in range(0, 1000):
    p[i] = i
4

1 回答 1

1

我的猜测:

  • 您发布的代码实际上是包装在一个函数中,在这种情况下p分配在堆栈上,一旦给定函数返回,访问p是非法的。
  • 你不检查i溢出,如果发生什么i > 1000000
  • 尝试在堆栈上分配 1M 8 字节整数可能超出允许范围,请检查ulimit -a

总体而言,OP 中没有足够的信息,例如:

  • 该代码是模块的顶级代码还是函数的内容?
  • 程序如何中止(SEGV?)
  • 指的p是什么语境?
  • 你用什么操作系统/架构?

我无法用 Python 2.7.3 Cython 0.17.2 gcc 4.7.2 linux 3.6.9 x86-64 重现您的问题

于 2013-01-01T12:32:49.637 回答