gpt4 book ai didi

c - 由于 int 长度为 20mb,导致浮点异常(核心转储)/段错误(核心转储)

转载 作者:行者123 更新时间:2023-11-30 19:23:01 25 4
gpt4 key购买 nike

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];
}
}

显然我在上面的代码中遇到了浮点异常,这是因为 ARRAY_SIZE是 20mb,如何才能不出现段错误或浮点异常,但仍然具有 20mb 的大小。

最佳答案

有很多问题:

  • 您尚未展示如何a已声明,因此我们不知道它的类型,也无法分析涉及它的表达式是如何计算的。
  • sbrk是一个过时的调用。除特殊情况外,malloc应该使用它来代替。
  • 声明a=(int *)((((int)a>>13)<<13)+8192);尝试对齐a 8192 字节的倍数,但至少应该使用 uintptr_t而不是int .
  • sbrk 的参数是一个字节数,但是 (int *) Actor 建议a是指向 int 的指针。无论如何,您应该将分配乘以 sizeof *a .
  • 之后a已经对齐到8192字节的倍数,不再有20*1024*1024+8192其后可用字节,因为其中一些已用于对齐。然而ARRAY_SIZE设置为20*1024*1024+8192并在循环中使用,从而确保数组会溢出。可能,ARRAY_SIZE应设置为20*1024*1024 .

关于c - 由于 int 长度为 20mb,导致浮点异常(核心转储)/段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13831488/

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