C++ c+中映射结构的内存使用情况+;程序
在下面的程序中,当我增加字符串列表的长度,即增加len1的值时,从windows任务管理器中看到的内存使用量也相应增加。但是,当我增加映射的长度(即增加len2的值)时,从windows任务管理器看到的内存使用情况几乎保持不变。你能谈谈这个问题吗? 谢谢大家!C++ c+中映射结构的内存使用情况+;程序,c++,memory,memory-management,std,stdmap,C++,Memory,Memory Management,Std,Stdmap,在下面的程序中,当我增加字符串列表的长度,即增加len1的值时,从windows任务管理器中看到的内存使用量也相应增加。但是,当我增加映射的长度(即增加len2的值)时,从windows任务管理器看到的内存使用情况几乎保持不变。你能谈谈这个问题吗? 谢谢大家! #include <iostream> #include <map> #include <stdio.h> #include <unistd.h> using namespace std;
#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));
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
空内存(inti,intj,map m);
类NewObject;
无效内存(inti,intj,map m1);
类NewObject{
长i=0L;
长j=0L;
长k=0L;
};
int main()
{
地图m;
地图m1;
不能地图填充函数插入具有相同键的元素,这意味着它们只插入一个元素并丢弃其余元素,而不管len2
的值如何地图填充函数插入具有相同键的元素,这意味着它们只插入一个元素并丢弃其余元素,而不管len2的值
在函数中按值传递映射,因此从主函数的角度来看,当函数退出时,所有更改都将被丢弃。
现在,如果您使用一些优化进行编译,那么程序可能永远不会在映射中插入元素。为了避免这种情况,请尝试使用插入到函数中的映射元素,并在函数执行时查看结果
但是,当函数退出时,您无法看到内存的填充量超过启动函数时的填充量
除此之外,还可以使用i
索引填充映射的第一个元素。
试着用k
替换配对中的i
要了解映射中的更改,请尝试按以下方式通过引用或指针将其传递给函数:
#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>(k,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>(k,n));
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
无效填充内存(inti、intj、map&m);
类NewObject;
无效内存(inti、intj、map和m1);
类NewObject{
长i=0L;
长j=0L;
长k=0L;
};
int main()
{
地图m;
地图m1;
cout您可以在函数中按值传递映射,因此从main的角度来看,当函数退出时,所有更改都将被丢弃。
现在,如果您使用一些优化进行编译,那么程序可能永远不会在映射中插入元素。为了避免这种情况,请尝试使用插入到函数中的映射元素,并在函数执行时查看结果
但是,当函数退出时,您无法看到内存的填充量超过启动函数时的填充量
除此之外,还可以使用i
索引填充映射的第一个元素。
试着用k
替换配对中的i
要了解映射中的更改,请尝试按以下方式通过引用或指针将其传递给函数:
#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>(k,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>(k,n));
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
无效填充内存(inti、intj、map&m);
类NewObject;
无效内存(inti、intj、map和m1);
类NewObject{
长i=0L;
长j=0L;
长k=0L;
};
int main()
{
地图m;
地图m1;
你能按值将映射传递给那些函数吗?除了内存使用之外,没有可观察的行为。优化的生成可能不会向映射插入任何内容。你打开了编译器优化吗?我想问题在于我的密钥设置为1。我会回去检查它。谢谢。你将按值传递映射给那些函数,然后除了内存使用之外,没有可观察的行为。优化的构建可能不会向映射中插入任何内容。是否启用了编译器优化?我认为问题在于我的密钥设置为1。我将返回并检查它。谢谢。及时提供帮助!因此我认为问题是由于行“m1.insert(pair(I,n));”?谢谢!及时帮助!所以我认为问题是由于行“m1.insert(pair(I,n));”引起的?谢谢!