读书人

内存分配的效率有关问题

发布时间: 2012-03-09 16:54:57 作者: rapoo

内存分配的效率问题
先看如下程序:
#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 的结构很复杂么? 不会是多赋值几次成了效率的关键吧~~~.

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

读书人网 >C++

热点推荐