| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1586 人关注过本帖
标题:发布几个vs2010自带的string中函数源码 看一下大能们是如何玩代码的
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:7 
发布几个vs2010自带的string中函数源码 看一下大能们是如何玩代码的
程序代码:
///////////////////////////////////////////////////////////////////////////
size_t __cdecl strlen (const char * str)
{
        const char *eos = str;
        while( *eos++ ) ;
        return( eos - str - 1 );
}

////////////////////////////////////////////////////////////////////////////
char * __cdecl strncpy (char * dest,const char * source,size_t count)
{
        char *start = dest;
        while (count && (*dest++ = *source++))  count--;   /* copy string */
        if (count)  while (--count) *dest++ = '\0';        /* pad out with zeroes */
        return(start);
}
//////////////////////////////////////////////////////////////////////////////
char * __cdecl strcat (char * dst,const char * src)
{
        char * cp = dst;
        while( *cp ) cp++;                   /* find end of dst */
        while( *cp++ = *src++ ) ;            /* Copy src to end of dst */
        return( dst );                       /* return dst */

}
////////////////////////////////////////////////////////////////////////////
char * __cdecl strcpy(char * dst, const char * src)
{
        char * cp = dst;
        while( *cp++ = *src++ );             /* Copy src over dst */
        return( dst );
}
/////////////////////////////////////////////////////////////////////////////
搜索更多相关主题的帖子: 如何 
2016-10-31 14:40
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:34 
这只是示例代码吧,因为有无数种更高效的做法,一般都是汇编写成的,甚至会使用多媒体指令加速
2016-10-31 21:57
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
我觉得这代码就挺好了  难道还有更好的  show一下!!!

DO IT YOURSELF !
2016-11-01 10:49
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
汇编也没有多神秘、也是直连语句 选择分支语句 循环语句 还有函数啥的

DO IT YOURSELF !
2016-11-01 10:51
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:34 
依样画葫芦。(自己画的,不一定是不是源码)
程序代码:
char * __cdecl strcmp(char * dst, const char * src)
{
       
        while( *dst ){dst++;src++;};             /* Compare dst and sre */
        return( *(dst)-*(src) );
}
-------------------------------- 





[此贴子已经被作者于2016-11-1 11:20编辑过]


φ(゜▽゜*)♪
2016-11-01 11:10
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:34 
以下是引用书生牛犊在2016-11-1 11:10:06的发言:

依样画葫芦。(自己画的,不一定是不是源码)
int  __cdecl strcmp(char * dst, const char * src)
{
      
        while( *dst&&*src&&!(*dst-*src)){dst++;src++;}             /* Compare dst and sre */
        return(*dst-*src);
}
--------------------------------

你的strcmp都不对。
1,返回值不是char *类型,而是int类型吧。
2,while循环直接就乱来。
所以作了小小的修改。
2016-11-01 12:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
strcmp的源代码是这个样子的

程序代码:
int __cdecl strcmp (const char * src,const char * dst)
{
        int ret = 0 ;
        while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst) ++src, ++dst;
        if ( ret < 0 )  ret = -1 ; else if ( ret > 0 ) ret = 1 ;
        return( ret );
}


[此贴子已经被作者于2016-11-1 14:19编辑过]


DO IT YOURSELF !
2016-11-01 14:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用wp231957在2016-11-1 10:49:41的发言:

我觉得这代码就挺好了  难道还有更好的  show一下!!!
关于汇编及多媒体指令的我就不说了(因为细节太多,我也不会),单说C语法上的优化,大家都能看懂
以 strlen 为例
你一次取一字节,是不是很浪费?因为CPU一次取出的是一字长,你只取一字节的话,还得删掉多余的,这次多余的字节,在下一次却是有用的,又得再取再删
所以,优化的第一步是每次取一字长
取一字长,要想最快,还可以先字长对齐
判断一字长中是否有字节为0,是可以使用技巧的
循环可以展开一些,以大家CPU cache的命中率
只想到这一点点
2016-11-01 14:51
快速回复:发布几个vs2010自带的string中函数源码 看一下大能们是如何玩代码的
数据加载中...
 
   



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

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