4

即使是非常小的简单整数数组也会出现奇怪的行为。

%%cython
import numpy as np
cimport cython
cimport numpy as np

def hi():
    DEF MAX = 10000000
    cdef int a[MAX],i
    cdef int[:] a_mv = a

这会崩溃,但较小视图的视图执行我的。这不是一个明显的内存问题,因为有足够的 RAM 可容纳 1000 万个整数......

4

1 回答 1

7

正如凯文在他的评论中提到的那样,问题不在于 RAM,而在于堆栈。您正在堆栈上分配一个包含 1000 万个元素的数组,而您应该真正在堆上分配它,使用malloc等朋友。即使在 C 中,这也会产生分段错误:

 /* bigarray.c */
int main(void) {
    int array[10000000];
    array[5000000] = 1;   /* Force linux to allocate memory.*/
    return 0;
}

$ gcc -O0 bigarray.c   #-O0 to prevent optimizations by the compiler
$ ./a.out 
Segmentation fault (core dumped)

尽管:

/* bigarray2.c */
#include <stdlib.h>

int main(void) {
    int *array;
    array = malloc(10000000 * sizeof(int));
    array[5000000] = 1;
    return 0;
}

$ gcc -O0 bigarray2.c
$ ./a.out 
$ echo $?
0
于 2013-06-09T17:46:41.437 回答