gpt4 book ai didi

c++ - 在分配大型数组期间增加内存

转载 作者:太空宇宙 更新时间:2023-11-03 10:29:15 24 4
gpt4 key购买 nike

当给一个大数组赋值时,即使没有分配新的内存,使用的内存也会不断增加。我只是通过任务管理器 (windows) 或系统监视器 (Ubuntu) 检查已用内存。

两个操作系统上的问题相同。我分别使用 gcc 4.7 或 4.6。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
int i,j;
int n=40000000; //array size
int s=100;
double *array;

array=malloc(n*sizeof(double)); //allocate array
if(array==NULL){
return -1;
}

for(i=0;i<n;i++){ //loop for array, memory increases during this loop
for(j=0;j<s;j++){ //loop to slow down the program
array[i] = 3.0;
}
}
return 0;
}

我没有看到任何逻辑问题,但据我所知我也没有超过任何系统限制。所以我的问题是:

  • 其他人可以重现这个问题吗?

  • 内存增长的原因是什么?

  • 我该如何解决这个问题?

最佳答案

当现代系统“分配”内存时,页面实际上并不是在物理 RAM 中分配的。您将获得虚拟内存分配。当您写入这些页面时,将占用一个物理页面。因此,当您执行 malloc() 时,占用的虚拟 RAM 会增加,但只有当您写入值时,才会占用物理 RAM(逐页)。

关于c++ - 在分配大型数组期间增加内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21765166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com