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

これはクラッシュしますが、小さなビューへのビューは私のものを実行します。1,000 万 int に十分な RAM があるため、これは明らかなメモリの問題ではありません...

4

1 に答える 1

7

Kevin がコメントで述べているように、問題は RAM ではなく、スタックです。et friendsを使用して、実際には heapに割り当てる必要があるときに、 1000 万個の要素の配列をstackに割り当てています。C でも、これによりセグメンテーション違反が発生します。malloc

 /* 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 に答える