我现在使用cython读取输入文件,将字符串转换为int并将它们存储在c数组(而不是列表)中以节省空间。我的代码看起来像这样:
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
答案 0 :(得分:1)
我的猜测:
p
被分配在堆栈上,一旦给定函数返回,对p
的访问就是非法的。i
是否有溢出,如果i > 1000000
会发生什么?ulimit -a
总体而言,OP中没有足够的信息,例如:
p
?我无法用Python 2.7.3 Cython重新编写你的问题0.17.2 gcc 4.7.2 linux 3.6.9 x86-64