免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8889 | 回复: 2
打印 上一主题 下一主题

map 存放指针 , erase后,内存值的大小 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-05 14:32 |只看该作者 |倒序浏览
#include <iostream>
#include <map>

typedef std::map<int, char *> test_map;
typedef std::pair<int, char *> test_pair;

int main()
{
    test_map tt_map;
    sleep(20);
    for(int i=0; i<50; i++)
    {
        char *str = new char[10];
        sprintf(str , "hello");
        tt_map.insert(test_pair(i , str));
        bzero(str , sizeof(str));
        usleep(15000);
        std::cout<<"i = "<<i<<std::endl;
    }

        std::map<int , char *>::iterator its;
    for(int i=0; i<50; i++)
    {
        its = tt_map.find(i);
        if(its != tt_map.end())
        {
            char *str = NULL;
            str = its->second;
            delete [] str;
            str = NULL;
tt_map.erase(its);
            usleep(15000);
        std::cout<<"i = "<<i<<std::endl;
        }
    }
    sleep(-1);
}


用top查看内存,为什么insert前和erase后内存大小不一样....
谢谢.....

论坛徽章:
0
2 [报告]
发表于 2007-11-07 22:45 |只看该作者
频繁的内存分配和释放会带来的运行效率降低和内存碎片的产生。为此,C++ 标准库的容器类在实现上通常都用内存池来管理内存。这样,删除元素对象的时候就有可能只是释放给内存池,而不是归还给操作系统。

论坛徽章:
0
3 [报告]
发表于 2007-11-08 10:30 |只看该作者
嗯,受教!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP