C++ c+中映射结构的内存使用情况+;程序

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;

在下面的程序中,当我增加字符串列表的长度,即增加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));
        }


    }
#包括
#包括
#包括
#包括
使用名称空间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));”引起的?谢谢!