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);