首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

内存分配的效率有关问题

2012-03-09 
内存分配的效率问题先看如下程序:#includeiostream#includefstream#includectimeusingnamespacestd

内存分配的效率问题
先看如下程序:
#include   <iostream>
#include   <fstream>
#include   <ctime>
using   namespace   std;

time_t   Test1(string   s)
{
        const   char*   p   =   s.substr(0,15).c_str();
        char   time2[30];
        snprintf(time2,30, "%d   %s ",2007,p);
        struct   tm   ltm;
        strptime(time2, "%Y   %B   %d   %T ",   &ltm);   //将字符串日期格式化后放到   ltm中
        return   mktime(&ltm);
}

time_t   Test2(string   s)
{
        const   char*   p   =   s.substr(0,15).c_str();
        char   time2[30];
        snprintf(time2,30, "%d   %s ",2007,p);
        struct   tm   *   pltm   =   new   struct   tm;
        strptime(time2, "%Y   %B   %d   %T ",   pltm);
        time_t   t   =   mktime(pltm);
        delete   pltm;
        return   t;
}


int   main()
{
        ifstream   f( "/home/user1/maillogtest ");
        if   (!f)   {
                cerr   < <   "read   file   error ";
                exit(1);
        }
        string   s;
        while   (getline(f,   s))   {
                Test2(s);
        }

        return   0;
}

编译器版本:
gcc   version   3.4.5   20051201   (Red   Hat   3.4.5-2)
问题如下:
当调用Test1()函数时,运行时间大约是18s,   但是运行   Test2()确只用了0.4s.
为什么采用动态分配内存与静态(不知道这个术语用的是否恰当?)效率差别如此之大??

[解决办法]
你测试方法可能有误。文件读取会有cache。
你应该对内存数据进行测试。
[解决办法]
楼主,你这种测试准确么?
taodm说的方面我就不提了,此外,你有没有考虑其他因素,比如上下文切换以及其他的干扰,你有没有仔细地考虑baseline时间?
最好还是弄一个专业的测试软件或程序进行测试的好。
[解决办法]

检查一下结果是否正确.
[解决办法]
神奇, "一样 "的代码,差别竟然那么多.
time_t 的结构很复杂么? 不会是多赋值几次成了效率的关键吧~~~.

或者,看看是不是函数被内联之类的东西.

热点排行