我收到一个大型卷积运算的错误"User store segfault @ 0x000000007feff598
"。我已经将结果数组定义为
int t3_isize = 0;
int t3_irowcount = 0;
t3_irowcount=atoi(argv[2]);
t3_isize = atoi(argv[3]);
int iarray_size = t3_isize*t3_irowcount;
uint64_t t_result[iarray_size];
我注意到,如果数组大小小于2^16 - 1
,操作不会失败,但对于2^16
或更高的数组大小,我会得到segfault错误。
知道为什么会发生这种事吗?我该如何纠正?
“我注意到,如果数组大小大于2^16-1,操作不会失败,但对于2^16或更大的数组大小,我会得到segfault错误”
↑看起来有点自相矛盾。
但可能您只是在堆栈上分配了一个太大的数组。使用动态内存分配(例如,只需切换到使用std::vector
)可以避免该问题。例如:
std::vector<uint64_t> t_result(iarray_size);
顺便说一句,我会放弃像前缀一样的匈牙利符号。例如,t_
读起来就像这是一种类型。匈牙利表示法的时代是20世纪80年代末,其目的是支持微软的程序员工作台,这是一个现在已经停产(很长时间)的产品。
您可能为堆栈声明了太大的数组。每个8字节的216元素相当多(512K字节)。
如果您只需要静态分配,请将数组移动到文件范围。
否则,请考虑使用std::vector
,它将从堆中分配存储并为您管理它。
使用malloc()解决了这个问题。
uint64_t* t_result = (uint64_t*) malloc(sizeof(uint64_t)*iarray_size);