NiehManYo
2021-01-08 23:21
采纳率: 50%
浏览 79

C++数组申请大于100w的内存时会溢出,如果想在数组里申请大于100w该如何解决内存溢出?

一个比较简单的代码

int size;

cin<<size;

int array[size];

当我的size>1000000时,内存就会溢出,系统就不能申请了,有大佬说能够通过malloc来实现更多申请,请大佬多指点,谢谢了。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • include_iostream_ 2021-01-09 00:09
    已采纳

    原话是咋说的?就我所知malloc单次申请也是有上限的啊,因为OS分配内存时,每个段是有长度上限的。(但是你可能会注意到,申请100MB空间后打开任务管理器,实际内存占用不见得真是100MB,可能还是很少,这不表示没有分配,而是跟OS和C Runtime的具体实现机制有关,这种现象通常是正常的,可以无视。)

    当然你可以malloc多次。malloc的用法:https://linux.die.net/man/3/malloc

    (使用必应搜索man malloc就能找到这个条目。C标准库里的东西都可以用类似的方式查到,也可以去cppreference查询。)

    PS:你现在的写法被称为VLA(变长数组),很多人都非常不喜欢这个语法,主要是这东西的支持程度本来就变化很大。有的实现中调用了CRT,有的实现中简单移动了栈指针(是的,根本不检查这么做会不会导致栈溢出),还有的干脆不支持VLA。这东西相比于malloc最要命的地方在于,只要是内存分配就有可能失败,要是装入失败OS会解决,要是堆分配失败malloc会返回NULL,但是VLA分配失败的话根本没提供任何错误处理接口(当然,你愿意的话可以用setjmp库,但考虑到你现在写的是c++,这样做可能反而会带来危险多于方便),这是非常危险的:别说错误处理,你甚至无从知道它有没有出错(直到发生段错误或类似的事情)。

    点赞 打赏 评论

相关推荐 更多相似问题