新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 C/C++编程思想 』 → char, string, vector的内存使用比较 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 6810 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: char, string, vector的内存使用比较 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 char, string, vector的内存使用比较

    #include <string>
    #include <vector>

    #pragma warning(disable : 4996)

    using namespace std;

    typedef unsigned long ulong;

    #define STRING_ARRAY_VERSION        0
    #define STATIC_CHAR_VERSION         1
    #define CHAR_STAR_VERSION           2
    #define STRING_VECTOR_VERSION       3
    #define CHAR_STAR_VECTOR_VERSION    4

    #define TEST_VERSION                0

    #define NUM                         10000
    #define SIZE                        10

    int main()
    {
        switch(TEST_VERSION)
        {
        case STRING_ARRAY_VERSION:
          {
            string data[NUM];

            for(ulong i = 0; i < NUM; i++)            
                data[i] = "aabb";                    

            break;
          }

        case STATIC_CHAR_VERSION:
          {    
            char data[NUM][SIZE];

            for(ulong i = 0; i < NUM; i++)
                strcpy(data[i], "aabb");                    

            break;
          }

        case CHAR_STAR_VERSION:
          {
            char* data[NUM];

            for(ulong i = 0; i < NUM; i++)
            {
                data[i] = new char[10];
                strcpy(data[i], "aabb");
            }

            break;
          }

        case STRING_VECTOR_VERSION:
          {
            vector<string> data;
            
            for(ulong i = 0; i < NUM; i++)        
                data.push_back("aabb");        

            break;
          }

        case CHAR_STAR_VECTOR_VERSION:
          {
            vector<char*> data;

            for(ulong i = 0; i < NUM; i++)    
            {
                char* p = new char[10];
                strcpy(p, "aabb");

                data.push_back(p);
            }     
          }
        }
        
        while(1)
            ;

        return 0;
    }

    ------------------------------------------------------------------------------------------------------

    测试结果:

    string array:            times - 10000     memory - 1740k     VM - 828k
    static char array:    times - 10000     memory - 1740k     VM - 820k
    char* array:             times - 10000     memory - 2292k     VM - 1368k
    string vector:         times - 10000     memory - 1752k     VM - 828k
    char* vector:          times - 10000     memory - 2340k     VM - 1420k

    可以看出,使用string以及vector或者静态分配数组,内存消耗是比较少的,多次new小内存导致内存消耗明显增多。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/11/25 17:14:00
     
     oldnwind 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:8
      积分:94
      门派:XML.ORG.CN
      注册:2006/4/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给oldnwind发送一个短消息 把oldnwind加入好友 查看oldnwind的个人资料 搜索oldnwind在『 C/C++编程思想 』的所有贴子 访问oldnwind的主页 引用回复这个贴子 回复这个贴子 查看oldnwind的博客2
    发贴心情 
    请教楼主:
    测试结果中,有关内存使用时通过什么工具还是没贴出来的部分代码完成的?


    这种凡有疑问必亲自测试/体验的治学态度很值得学习!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/12/24 11:03:00
     
     gtict 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:6
      积分:88
      门派:XML.ORG.CN
      注册:2008/12/30

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给gtict发送一个短消息 把gtict加入好友 查看gtict的个人资料 搜索gtict在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看gtict的博客3
    发贴心情 
    顶下楼上的,内存怎么测出来的还没说
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/12/31 12:29:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/28 13:22:29

    本主题贴数3,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.500ms