青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

The power of C, the power of MD

A problem is a chance to do your best
posts - 11, comments - 22, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

strcatC語言一個基本的字符串操作函數(shù),它的源代碼一般是這樣的。

char *strcat(char *dest, const char *src)   
{   
    
char *tmp = dest;   
    
while (*dest) dest++;   
    
while ((*dest++ = *src++!= '\0');   
    
return tmp;   
}
  


由此可見,strcat調(diào)用時,先移動目標(biāo)字符串的指針到其尾部,再進(jìn)行復(fù)制。這種做法對于下標(biāo)比較大的數(shù)組重復(fù)調(diào)用時,效率比較低。想象一下,第一次調(diào)用strcat時,指針由0數(shù)到100,只不過復(fù)制了幾個字符,第二次調(diào)用strcat時,指針又從0數(shù)到108,無論調(diào)用多少次,指針總是從0數(shù)起,就會知道這個時候是多么浪費(fèi)系統(tǒng)資源了!

我找到一個辦法,字符串追加時,事先給出目標(biāo)字符串結(jié)尾所在的位置,追加時,也就不用從頭開始計(jì)算其長度了,復(fù)制的過程中,目標(biāo)字符串的結(jié)尾也隨之移動,下一次再追加也就可以使用它了。以下就是優(yōu)化過的string_append,與strcat相比,增加了一個整形指針以傳遞目標(biāo)字符串長度的地址。

/*
 * optimizer for strcat when appending to a large array again and again
 
*/

char *string_append(char *dest, int *end, const char *src) {
    
if ( *end >= 0 && dest && src ) {
        
char *= dest + *end;
        
while ( *p++ = *src++ ) (*end)++;
    }

    
return dest;
}


經(jīng)試驗(yàn),string_append在大數(shù)組重復(fù)追加內(nèi)容的情形下,優(yōu)勢非常明顯。其它情形下,使用原來的strcat也就足夠了。

#include <stdio.h>
#include 
<string.h>
#include 
<time.h>

#define BUFF_SIZE 4096

/*
 * optimizer for strcat when appending to a large array again and again
 
*/

char *string_append(char *dest, int *end, const char *src) {
    
if ( *end >= 0 && dest && src ) {
        
char *= dest + *end;
        
while ( *p++ = *src++ ) (*end)++;
    }

    
return dest;
}


int main() {
    
int i = 0, j = 0;
    
int retry = 100000;
    
int field = 100;
    
char output1[BUFF_SIZE], output2[BUFF_SIZE];
    time_t time1 
= time(NULL);
    
for ( i = 0; i < retry; i++ ) {
        memset(output1, 
0, BUFF_SIZE);
        
int length = 0;
        string_append(output1, 
&length, "header\n");
        
for ( j = 0; j < field; j++ ) {
            string_append(output1, 
&length, "\tcall detail record ");
            
char c[8];
            sprintf(c, 
"%d", j);
            string_append(output1, 
&length, c);
            string_append(output1, 
&length, "\n");
        }

        string_append(output1, 
&length, "trailer\n");
    }

    time_t time2 
= time(NULL);
    printf(
"It takes %d seconds to show the performance of string_append()\n", time2 - time1);

    time1 
= time(NULL);
    
for ( i = 0; i < retry; i++ ) {
        memset(output2, 
0, BUFF_SIZE);
        strcat(output2, 
"header\n");
        
for ( j = 0; j < field; j++ ) {
            strcat(output2, 
"\tcall detail record ");
            
char c[8];
            sprintf(c, 
"%d", j);
            strcat(output2, c);
            strcat(output2, 
"\n");
        }

        strcat(output2, 
"trailer\n");
    }

    time2 
= time(NULL);
    printf(
"It takes %d seconds to show the performance of strcat()\n", time2 - time1);
    
if ( strcmp(output1, output2) )
        printf(
"They are NOT equal\n");
    
else
        printf(
"They are equal\n");
    
return 0;
}

 

-bash-3.2$ ./string_append_demo

It takes 2 seconds to show the performance of string_append()

It takes 11 seconds to show the performance of strcat()

They are equal


本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/yui/archive/2010/05/22/5616455.aspx

posted @ 2010-07-28 21:46 roy 閱讀(2202) | 評論 (10)編輯 收藏

僅列出標(biāo)題
共2頁: 1 2 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            麻豆精品国产91久久久久久| 亚洲一品av免费观看| 欧美77777| 久久黄金**| 久久成人国产精品| 另类天堂av| 欧美日韩国产综合视频在线观看中文| 欧美国产欧美综合| 欧美日韩一区二区三区视频| 国产精品极品美女粉嫩高清在线 | 亚洲视频 欧洲视频| 一区二区三区 在线观看视频| 亚洲私人黄色宅男| 欧美一区二区三区在线| 久久亚洲视频| 欧美日韩国产高清| 国产综合香蕉五月婷在线| 在线观看不卡av| 亚洲午夜91| 玖玖综合伊人| 日韩视频永久免费| 久久国产精品久久国产精品| 欧美—级在线免费片| 国产精品一二三| 91久久精品国产91性色| 中日韩在线视频| 老鸭窝亚洲一区二区三区| 亚洲毛片播放| 久久久久国色av免费观看性色| 欧美福利小视频| 国产最新精品精品你懂的| 99精品国产在热久久| 久久久噜噜噜久久中文字幕色伊伊| 亚洲电影av| 在线观看日韩| 先锋影音一区二区三区| 欧美激情一区二区三区成人| 亚洲欧美综合v| 欧美区一区二| 最新69国产成人精品视频免费| 亚洲女同精品视频| 亚洲精品免费电影| 欧美fxxxxxx另类| 红桃视频国产精品| 欧美一区二区黄| 99国产精品久久久久久久久久| 久久人人爽人人爽爽久久| 国产日韩精品一区二区三区| 99热这里只有精品8| 亚洲大片免费看| 久久久夜夜夜| 激情文学一区| 久久免费视频在线| 亚洲欧美综合网| 国产精品午夜久久| 亚洲欧美日韩精品久久奇米色影视| 亚洲精品欧美精品| 欧美大尺度在线| 亚洲精品美女免费| 欧美国产日韩精品| 免费亚洲电影在线| 亚洲精品久久嫩草网站秘色| 欧美激情视频一区二区三区免费 | 久久精品国语| 国模精品一区二区三区| 久久狠狠婷婷| 欧美影院在线| 在线观看91精品国产麻豆| 免费精品视频| 欧美电影免费观看| 99精品国产高清一区二区| 一本久久青青| 国产伦精品一区二区| 久久狠狠一本精品综合网| 久久九九国产精品怡红院| 在线看片成人| 91久久在线| 国产精品女主播一区二区三区| 欧美一区二区三区在线| 久久精品国产一区二区三| 91久久国产综合久久91精品网站| 亚洲高清av在线| 欧美午夜精品一区| 久久成人精品电影| 久久天堂精品| 亚洲午夜免费视频| 欧美亚洲视频在线观看| 亚洲国产精品久久久久婷婷884| 亚洲国产精品www| 欧美午夜精品久久久久久孕妇| 久久av一区二区三区| 久久久久久久激情视频| 99国产一区| 亚洲欧美日韩综合aⅴ视频| 久久免费视频这里只有精品| 尤物网精品视频| 亚洲麻豆视频| 91久久精品国产91性色tv| 狠狠色综合色区| 亚洲欧洲精品一区二区| 中文av字幕一区| 一区在线视频| 一区二区三区欧美在线| 在线播放中文一区| 夜夜嗨网站十八久久| 有码中文亚洲精品| 亚洲视频免费观看| 亚洲缚视频在线观看| 99在线精品观看| 亚洲大胆女人| 欧美一级一区| 亚洲字幕一区二区| 美日韩精品免费| 久久九九国产精品| 国产精品久久国产三级国电话系列| 久久综合九九| 国产日韩欧美综合精品| 亚洲理论在线| 亚洲国产精品电影| 欧美在线一二三四区| 亚洲一区二区伦理| 欧美精品一卡| 亚洲二区视频在线| 伊人久久综合97精品| 午夜久久久久| 性欧美精品高清| 国产精品乱码人人做人人爱| 亚洲伦伦在线| 亚洲一区久久| 国产精品v欧美精品v日韩| 日韩西西人体444www| 一本大道久久a久久精二百| 欧美超级免费视 在线| 欧美激情1区| 亚洲精品视频一区二区三区| 久久综合国产精品| 久久一区二区三区四区| 黄色日韩网站视频| 久久视频国产精品免费视频在线| 久久这里有精品视频| 狠狠色伊人亚洲综合成人| 午夜在线播放视频欧美| 久久国内精品视频| 国产一区二区三区在线播放免费观看 | 亚洲美女精品成人在线视频| 亚洲精品午夜精品| 欧美精品国产精品| 日韩午夜一区| 亚洲在线一区二区三区| 国产精品日韩二区| 久久av红桃一区二区小说| 麻豆91精品| 亚洲人成高清| 欧美午夜剧场| 亚洲欧美综合国产精品一区| 久久青青草综合| 在线免费日韩片| 欧美日韩国产影片| 日韩系列欧美系列| 国产主播一区二区| 久久久国产精品一区二区中文| 女仆av观看一区| 午夜视频一区二区| 亚洲黄色av| 亚洲国产高清一区| 欧美一区二区三区四区高清| 欧美激情视频免费观看| 欧美日韩一二三区| 亚洲国产精品va在线看黑人动漫| 一区二区电影免费观看| 亚洲一区精品电影| 日韩视频在线观看国产| 亚洲国产三级在线| 性欧美videos另类喷潮| 欧美图区在线视频| 午夜精品久久久久久久蜜桃app | 国产精品久久久久久模特| 国产亚洲观看| 亚洲三级影院| 欧美一区三区三区高中清蜜桃| 激情久久影院| 欧美日韩一级视频| 欧美在线观看www| 最新成人在线| 久久精品人人爽| 99热这里只有成人精品国产| 国产欧美日韩不卡| 欧美国产精品久久| 欧美一区永久视频免费观看| 亚洲高清色综合| 久久久国产精品一区二区三区| 一区二区三区视频在线看| 亚洲第一偷拍| 国产日韩欧美在线| 欧美视频一区二区| 嫩草成人www欧美| 久久国产欧美精品| 亚洲一区免费网站| 夜夜嗨av一区二区三区| 日韩亚洲在线|