免费注册 查看新帖 |

Chinaunix

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

C++内存操作速度问题 [复制链接]

论坛徽章:
2
白羊座
日期:2013-09-12 21:13:11酉鸡
日期:2014-12-18 13:56:26
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-02 19:50 |只看该作者 |倒序浏览
今天作一个大文件(50M~500M)处理的程序,我用strstr()遍历一边内存得到每一行的开始指针。50M的文件用时30秒。无法忍受了。后来换成这种方式
while(*pbuffer ++ != NULL)
{
           if(*pbuffer ++  == '\n')
           {
             iLine++;            
           }
}发现速度更慢。将近1分钟。


问一下各位有什么好方法能够较快速,遍历一块较大内存区域。

论坛徽章:
2
白羊座
日期:2013-09-12 21:13:11酉鸡
日期:2014-12-18 13:56:26
2 [报告]
发表于 2010-07-02 19:51 |只看该作者
strtok我也试了,速度也不是很快。将近40秒。

论坛徽章:
2
白羊座
日期:2013-09-12 21:13:11酉鸡
日期:2014-12-18 13:56:26
3 [报告]
发表于 2010-07-02 20:02 |只看该作者
各位有什么好方法提供一下啊,我实在是不知道该如何处理了。

论坛徽章:
0
4 [报告]
发表于 2010-07-02 20:23 |只看该作者
升级硬件!

论坛徽章:
2
白羊座
日期:2013-09-12 21:13:11酉鸡
日期:2014-12-18 13:56:26
5 [报告]
发表于 2010-07-02 20:24 |只看该作者
升级硬件!
cugb_cat 发表于 2010-07-02 20:23



   好主意......

论坛徽章:
2
白羊座
日期:2013-09-12 21:13:11酉鸡
日期:2014-12-18 13:56:26
6 [报告]
发表于 2010-07-02 20:32 |只看该作者
其实我就是想统计下文件行数、记录下每一行开始地址(涉及到数组付值,这部分时间比较大)。文件较大准备分批导入显示,所以需要行开始地址,进行现实内容的取得。

论坛徽章:
0
7 [报告]
发表于 2010-07-02 20:59 |只看该作者
用gcc的话,用最新的版本,编译开关加上-march=core2 -mssse3 -msse4.1可以生成针对core2优化的str系列函数。不过strstr没优化版本,你可以试试strtok。

glibc-2.11.2.tar.gz里的文件供参考:
./sysdeps/x86_64/strspn.S
./sysdeps/x86_64/strrchr.S
./sysdeps/x86_64/strcat.S
./sysdeps/x86_64/strcpy.S
./sysdeps/x86_64/strtok_r.S
./sysdeps/x86_64/strcspn.S
./sysdeps/x86_64/strcpy_chk.S
./sysdeps/x86_64/rtld-strlen.S
./sysdeps/x86_64/rtld-strchr.S
./sysdeps/x86_64/multiarch/strcmp-ssse3.S
./sysdeps/x86_64/multiarch/strspn.S
./sysdeps/x86_64/multiarch/strrchr.S
./sysdeps/x86_64/multiarch/strcpy.S
./sysdeps/x86_64/multiarch/strncpy.S
./sysdeps/x86_64/multiarch/strcspn.S
./sysdeps/x86_64/multiarch/rtld-strlen.S
./sysdeps/x86_64/multiarch/strncmp-ssse3.S
./sysdeps/x86_64/multiarch/strpbrk.S
./sysdeps/x86_64/multiarch/strcmp.S
./sysdeps/x86_64/multiarch/strlen.S
./sysdeps/x86_64/multiarch/strncmp.S
./sysdeps/x86_64/multiarch/strend-sse4.S
./sysdeps/x86_64/multiarch/strchr.S
./sysdeps/x86_64/strpbrk.S
./sysdeps/x86_64/strcmp.S
./sysdeps/x86_64/strlen.S
./sysdeps/x86_64/strncmp.S
./sysdeps/x86_64/strchr.S
./sysdeps/x86_64/strtok.S
./sysdeps/x86_64/strchrnul.S

./sysdeps/i386/i686/strtok_r.S
./sysdeps/i386/i686/multiarch/strspn.S
./sysdeps/i386/i686/multiarch/strcspn.S
./sysdeps/i386/i686/multiarch/strpbrk.S
./sysdeps/i386/i686/multiarch/strlen.S
./sysdeps/i386/i686/strcmp.S
./sysdeps/i386/i686/strtok.S
./sysdeps/i386/i586/strcpy.S
./sysdeps/i386/i586/strlen.S
./sysdeps/i386/i586/strchr.S
./sysdeps/i386/strtok_r.S
./sysdeps/i386/strcspn.S
./sysdeps/i386/strpbrk.S
./sysdeps/i386/i486/strcat.S
./sysdeps/i386/i486/strlen.S
./sysdeps/i386/strchr.S
./sysdeps/i386/strtok.S
./sysdeps/i386/strchrnul.S

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
8 [报告]
发表于 2010-07-02 21:11 |只看该作者
回复 7# 没本


   你是说编译程序的时候用 gcc  -march=core2 -mssse3 -msse4.1 xxx.c   还是编译gcc4.5的时候用-march=core2 -mssse3 -msse4.1
   有哪个发行版会用这么新的glibc的版本呢?

论坛徽章:
0
9 [报告]
发表于 2010-07-02 21:38 |只看该作者
你先用wc跑一下看需要多久

论坛徽章:
0
10 [报告]
发表于 2010-07-02 22:05 |只看该作者
是的wc,已经是一个不错的成品了,如果你觉得wc不错,那么去下载gnu的coreutils然后挖他的代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP