RAM中的C ++堆栈和堆

时间:2013-09-19 20:58:15

标签: c++ stack heap htop

我在Ubuntu上运行以下带有4GB RAM的c ++代码

const long long  nSize = 400000000;
double Array1[nSize];
for(int i=0; i<nSize; i++)
    Array1[i]= 2*2; // store on the stack

这适合RAM(我的电脑不会抱怨)。令人困惑的...... htop说在运行时几乎没有使用任何额外的RAM ......为什么? (如果需要更新,我通常会让它睡100秒)

另一方面,如果我动态分配大数组(如tutorials like this推荐我应该这样做) - htop告诉我它占用了大部分RAM(如果不是全部而且崩溃):

double *pnArray2 = new double[nSize];
for(int i=0; i<nSize; i++)
    pnArray2[i] = 2*2; // store on the heap

所以为什么我应该使用堆存储大数据结构......如果(如本例所示)堆栈可以处理更大的数组?

我认为堆应该比堆栈大!请告诉我我哪里错了。

1 个答案:

答案 0 :(得分:1)

可能只是优化器正在完成它的工作(或者不是,在第二种情况下)。它可能更难以优化第二个分配,因为理论上你可以访问指针范围之外的那个内存。

我设法在MSVS 2010中,在发布模式下重新启用此功能,并添加了一个简单的

std::cout << Array1[42];

将内存使用量提升到相同的值。 (授予,我确实使用了较低的值)

还没有为第一个剪辑生成代码,但第二个是。