【发布时间】:2020-10-21 09:24:08
【问题描述】:
在我下面的程序中,当我增加字符串列表的长度,即增加 len1 的值时,从 windows 任务管理器看到的内存使用量也会相应增加。但是,当我增加映射的长度,即增加 len2 的值时,从 Windows 任务管理器看到的内存使用情况几乎保持不变。您能否就这个问题分享一些启示? 谢谢!
#include <iostream>
#include <map>
#include <stdio.h>
#include <unistd.h>
using namespace std;
void fillMemory(int i,int j,map<int,int> m);
class NewObject;
void fillMoreMemory(int i,int j, map<int,NewObject> m1);
class NewObject{
long i = 0L;
long j = 0L;
long k = 0L;
};
int main()
{
map<int,int> m;
map<int,NewObject> m1;
cout << "Hello world!" << endl;
int len1=1000;
string l1[len1];
for(int i=0;i<len1;i++){
l1[i]="hello";
}
int len2=1000000;
fillMemory(1,len2,m);
fillMoreMemory(1,len2,m1);
cout << "Hello world!" << endl;
getchar();
return 0;
}
void fillMemory(int i,int j, map<int,int> m){
for(int k=i; k< j; k++){
m.insert(pair<int,int>(i,k));
}
}
void fillMoreMemory(int i,int j, map<int,NewObject> m1){
for(int k=i; k< j; k++){
NewObject n;
m1.insert(pair<int,NewObject>(i,n));
}
}
【问题讨论】:
-
您将映射按值传递给这些函数,除了内存使用情况外,没有可观察到的行为。优化的构建可能不会向地图中插入任何内容
-
你打开编译器优化了吗?
-
我认为问题在于我的密钥设置为 1。我会回去检查一下。谢谢。
标签: c++ memory memory-management std stdmap