分配大内存的最佳方式

时间:2014-07-28 23:00:14

标签: c++ memory memory-management

在我的Visual C ++应用程序中,我知道要分配的总对象(CMyObject)是16728064,每个对象是64字节,因此要分配的总内存是1GB。内存将在开始时分配,在应用程序的整个生命周期中使用,并在最后发布。

在这种情况下,分配内存的最佳方法是什么?

当前我尝试在开头分配内存,如下所示:

    CMyObject *p = new CMyObject[16728064];

    // Perform tasks.

    delete [] p;

但是大部分时间配置都会失败。现在我想做如下:

    CMyObject *p[10];

    p[0] = new CMyObject[1672806];

    p[1] = new CMyObject[1672806];

    …

    // Perform tasks

    Delete [] p[0];

    ….

这似乎有一段时间了。

因此,我应该将分配分成尽可能小的部分吗?或者对于这种情况有什么好的解决方案吗?

由于

2 个答案:

答案 0 :(得分:2)

通常,是的,您应该将较大的分配拆分为较小的分段。根据您的系统,它可能没有1GB的连续内存。

答案 1 :(得分:2)

假设这是X86处理器或类似的东西,只有虚拟地址空间是连续的。对于X86,物理内存由4096字节页组成,物理页不必是连续的,只有映射的虚拟地址空间。

当我运行Windows XP 32位时,在4GB的系统上,它显示3.6 GB的物理内存可用,并且通常我的测试程序没有分配1 GB的问题,而在两者之间分配内存的失败1.5GB和2GB。

我的猜测是大量分配可用物理内存失败的原因与操作系统有关,而不是处理器虚拟到物理映射限制。

您使用的是哪种操作系统?