gpt4 book ai didi

python - Cython Memoryviews——大型阵列上的段错误?

转载 作者:太空狗 更新时间:2023-10-30 02:21:19 25 4
gpt4 key购买 nike

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

%%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

这会崩溃,但对较小 View 的 View 会执行我的操作。这不是明显的内存问题,因为有足够的 RAM 用于 1000 万个整数...

最佳答案

正如 Kevin 在他的评论中提到的,问题不在于 RAM,而在于堆栈。您正在 堆栈 上分配一个包含 1000 万个元素的数组,而实际上您应该使用 malloc堆上 分配它。等 friend 。即使在 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

关于python - Cython Memoryviews——大型阵列上的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17012210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com