| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8580 人关注过本帖, 2 人收藏
标题:strcpy函数怎么写
只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
不会吧……Orz我内嵌汇编得了……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-14 20:21
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
足足是二楼代码的时间的3.8倍

[color=white]
2008-05-14 20:23
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
char* str_cpy(char* dest,const char* src)
{
    assert(dest != NULL && src != NULL);

    char *str=dest;
    int *pd=(int*)dest,*ps=(int*)src;
    while (*ps&0xff && *ps&0xff00 && *ps&0xff0000 && *ps&0xff000000)
        *pd++=*ps++;
    for (dest=(char*)pd,src=(char*)ps;*dest++=*src++;);
    return str;
}


一千万个字符,比标准库慢1ms,比直接复制快2ms……Orz……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-14 20:35
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
啊啊啊啊……GCC的优化太差劲了……换VC9编译器……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-14 20:36
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
str_cpy Uses time 79ms
str_cpy2 Uses time 176ms
strcpy Uses time 167ms
VC9编译的结果,str_cpy2是直接复制……不知道该说什么了……
请按任意键继续. . .

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-14 20:38
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
str_cpy Uses time 105ms
str_cpy2 Uses time 116ms
strcpy Uses time 95ms
请按任意键继续. . .

完全一样的代码,GCC的结果……可以看出VC9优化过的版本,比GCC的库函数还要快……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-14 20:39
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
以上两楼数据是复制100M数据的结果……代码如下:
#include <iostream>
#include <cassert>
#include <ctime>


char* str_cpy(char* dest,const char* src)
{
    assert(dest != NULL && src != NULL);

    char *str=dest;
    int *pd=(int*)dest,*ps=(int*)src;
    while (*ps&0xff && *ps&0xff00 && *ps&0xff0000 && *ps&0xff000000)
        *pd++=*ps++;
    for (dest=(char*)pd,src=(char*)ps;*dest++=*src++;);
    return str;
}

char* str_cpy2(char* dest,const char* src)
{
    assert(dest != NULL && src != NULL);
    char *str=dest;
    while (*dest++ = *src++);
    return str;
}

#define N 100000000
char a[N],s[N],d[N];

#define Test(strcpy) \
    do { \
        for(int i=0;i<N;i++)a[i]=s[i],d[i]=0; \
        clock_t t=clock(); \
        strcpy(d,a); \
        printf(#strcpy" Uses time %ldms\n",clock()-t); \
    } while(0)

int main(void)
{
    for (int i=0;i<N;i++)s[i]=rand()%255+1;
    s[N-1]=0;

    Test(str_cpy);
    Test(str_cpy2);
    Test(strcpy);

    return 0;
}

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-14 20:42
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
[bo]以下是引用 [un]雨中飛燕[/un] 在 2008-5-14 19:42 的发言:[/bo]

你要是你觉得你很牛那你写一个内嵌汇编的版本发来看看


你用c我用汇编,咱们比比如何?

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-05-14 20:58
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
怎么我刚回来,爱吹牛的小妹妹就躲起来了?

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-05-14 21:05
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
加速的方法早已公布了,你要是利用刚刚所说的方法去写汇编,
超越C代码的速度根本不难
你有本事就用二楼的代码改写汇编来较量呗

[color=white]
2008-05-14 21:12
快速回复:strcpy函数怎么写
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018207 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved