天行健 君子当自强而不息

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小内存导致内存消耗明显增多。


posted on 2007-12-22 19:45 lovedday 阅读(2467) 评论(4)  编辑 收藏 引用 所属分类: ▲ C++ Program

评论

# re: char, string, vector的内存使用比较[未登录] 2007-12-22 22:23 TheAnswer

new小内存,系统一般会圆整为2的幂来分配,内存占用多些很正常的。  回复  更多评论   

# re: char, string, vector的内存使用比较 2008-08-25 13:51 microzhang

厉害,
谢谢您的无私奉献,
请问一下,如何测得 "测试结果:" 这下面的数据.
是使用windows 哪几个API 函数还是 使用工具.
麻烦指教, 谢谢.
microzhang@126.com  回复  更多评论   

# re: char, string, vector的内存使用比较[未登录] 2008-08-25 16:48 lovedday

使用windows的任务管理器查看的。  回复  更多评论   

# re: char, string, vector的内存使用比较 2012-07-03 14:20 clamp

strcpy(p, "aabb");
测试的数据太短,说明不了问题  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

导航

统计

常用链接

随笔分类(178)

3D游戏编程相关链接

搜索

最新评论