放大堆积c ++

时间:2014-04-01 18:52:48

标签: c++ heap heap-size

有没有办法扩大c ++程序的堆积?在android中,您可以通过在manifestfile中将其声明为大型来轻松实现。

当我尝试在堆上分配10亿个数组元素时遇到了这个问题。

int main() {
 int size = 1000000000;
 int* nmbr = new int[size];
 return 0;
}

2 个答案:

答案 0 :(得分:2)

C ++本身并不知道"堆"是。这是一个实现问题,因此您必须查看编译器的文档。这是Google搜索" MSVC堆大小标记"实测值:

http://msdn.microsoft.com/en-us/library/f90ybzkh.aspx

从MSDN页面引用:

  

/ HEAP选项设置堆的大小(以字节为单位)。这个选项是   仅用于构建.exe文件时使用。

答案 1 :(得分:2)

通常堆大小是特定于实现的,取决于您使用的编译器。看一下文档,大多数提供了一种改变堆大小的方法。

为您提供更一般的答案:

堆可以是任何大小,您无法将其与计算机内存进行比较。仅仅因为你的计算机可能有4GB的内存并不意味着每个程序都可以使用尽可能多的内存。 MS Visual C ++中的默认堆大小为1MB,但运行时程序仍将耗尽超过1MB。程序使用的内存也包括操作系统使用的堆栈内存,句柄和线程,以及最后但并非最不重要的程序代码及其包含的所有字符串和其他文字。

分配内存的主要问题是如何解决它。这是x86和x64架构之间的主要区别。在32位Windows操作系统上,您的程序通常只有2GB的可用虚拟内存(或3GB的特殊设置)。

有一天你会注意到,即使剩下足够的空间,你也可能会出现内存错误。如果运行时内存碎片太多,运行时无法在任何地方填充请求的数量,并且通常是由频繁的内存泄漏引起的,则会发生这种情况。为了避免这种情况,需要大量内存的应用程序将尝试在执行任何实际工作之前将其分配到大块中,并且将具有某种内存管理来自己处理分配(SQL数据库可能会这样做)。通过这种方式,他们可以根据需要重新排列内存中的数据。有多种方法可以在Windows中使用VirtualAlloc或其他形式的分配。