C 浮点异常(内核转储)/由于20mb长的int导致的分段错误(内核转储) a=sbrk(20*1024*1024+8192); a=(int*)(((int)a>>13)
您正在分配一个长度为C 浮点异常(内核转储)/由于20mb长的int导致的分段错误(内核转储) a=sbrk(20*1024*1024+8192); a=(int*)(((int)a>>13),c,segmentation-fault,C,Segmentation Fault,您正在分配一个长度为20*1024*1024+8192字节的内存块,然后将其视为20*1024*1024+8192整数的数组。请尝试以下操作: a = sbrk(20*1024*1024+8192); a=(int *)((((int)a>>13)<<13)+8192); gettimeofday(&start,NULL); ARRAY_SIZE = 20*1024*1024+8192; for (times=0; time
20*1024*1024+8192
字节的内存块,然后将其视为20*1024*1024+8192
整数的数组。请尝试以下操作:
a = sbrk(20*1024*1024+8192);
a=(int *)((((int)a>>13)<<13)+8192);
gettimeofday(&start,NULL);
ARRAY_SIZE = 20*1024*1024+8192;
for (times=0; times<SOME_LARGE_NUMBER; times++){
for (i=0; i<ARRAY_SIZE; i=i+SOME_ACCESS_SIZE){
dummy=a[i];
}
}
有许多问题:
- 您还没有展示如何声明
,因此我们不知道它的类型,也无法分析涉及它的表达式是如何计算的a
是一个过时的调用。除特殊情况外,应改用sbrk
malloc
- 语句
a=(int*)(((int)a>>13)我不明白
a=(int*)(((int)a>>13)
ARRAY_SIZE = (20*1024*1024+8192) / sizeof(int);