【问题标题】:Why does declaring an int array of length INT_MAX create a segmentation fault? [duplicate]为什么声明长度为 INT_MAX 的 int 数组会产生分段错误? [复制]
【发布时间】:2018-11-10 22:20:53
【问题描述】:

以下代码在编译和运行时会出现分段错误。这是为什么呢?

#include <stdio.h>
#include <limits.h>

int main(void)
{
  int fat_array[INT_MAX];

  return 0;
}

【问题讨论】:

  • 您的系统当时没有足够的内存来容纳这么大的 local 数组。它在运行时尝试并失败了。
  • 没有.com的stackoverflow
  • int fat_array[INT_MAX] 需要 8 GiB 的堆栈空间;类 Unix 系统很慷慨,通常会给你 8 MiB 的堆栈空间; Windows 更保守,通常只给你 1 MiB。无论哪种方式,它的空间都比需要的少得多。在文件范围(main() 之外)分配数组,或使用动态内存分配(malloc() 等)。

标签: c arrays segmentation-fault


【解决方案1】:

您要求的是为您分配大约2,147,483,647integer 空间。每个整数通常是四个字节,所以 8,589,934,588 字节是 8 GB 的内存。这可能高于单个进程允许保留的允许内存量,并且有充分的理由,因此您会收到错误。

【讨论】:

  • 说“超过允许单个进程保留的内存量”有点误导。如果要进行堆分配并且系统有足够的空间,则可以使用它来保留/分配尽可能多的内存,并且内存没有一般限制。这里的具体问题是它是“堆栈”分配的(也称为自动存储)。
猜你喜欢
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 2013-05-01
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
相关资源
最近更新 更多