内存申请那点事

MiniTimer m_timer;

    m_timer.init();

    m_timer.Start();
    for(int n =0 ;n < 200 ;++n)
    {
        
        Vertex* meshData = new Vertex[1000];
    }

    double usetime = m_timer.getTime();
    printf("New Large Memory :%f \n",usetime);

    m_timer.Start();
    for(int n =0 ;n < 2000 ;++n)
    {
        Vertex* meshData = new Vertex[100];
    }

    double usetime2 = m_timer.getTime();
    printf("New Low Memory   :%f \n",usetime2);

    m_timer.Start();
    for(int n =0 ;n < 20000 ;++n)
    {
        Vertex* meshData = new Vertex[10];
    }
    double usetime3 = m_timer.getTime();
    printf("New varySmall mem:%f \n",usetime3);

1.内存申请的总容量都一样,但是小块的数量不一样,结果如何?

结果是内存块越小,花费的时间越多

分别是:

0.0083(秒)

0.0090(秒)

0.01934(秒)

 

2.如果申请的内存一个是大块,一个是小块,哪个更快?

MiniTimer m_timer;

    m_timer.init();

    m_timer.Start();
    for(int n =0 ;n < 200 ;++n)
    {
        
        Vertex* meshData = new Vertex[1000];
    }

    double usetime = m_timer.getTime();
    printf("New Large Memory :%f \n",usetime);

    m_timer.Start();
    for(int n =0 ;n < 200 ;++n)
    {
        Vertex* meshData = new Vertex[100];
    }

    double usetime2 = m_timer.getTime();
    printf("New Low Memory   :%f \n",usetime2);

    m_timer.Start();
    for(int n =0 ;n < 200 ;++n)
    {
        Vertex* meshData = new Vertex[10];
    }
    double usetime3 = m_timer.getTime();
    printf("New varySmall mem:%f \n",usetime3);

 

 

显然小块的速度更快。

花费时间分别为:

0.0076(秒)

0.00076(秒)

0.000217(秒)

 

 

总结: 如果无可改变的要申请的大块内存,就不要分开几个小块申请,内存块越小,速度越快  ,如果你用内存池,那这些都是废话了

 

分割线-------------------------------------------------------------------------------------------------------------------------------------------------------

2017-5-25

3.windows最大申请内存他会限制到 大约2G

 

 

但是1G多已经是申请不到了

 

posted on 2017-05-02 14:09  c_dragon  阅读(575)  评论(0编辑  收藏  举报

导航