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

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>
            娇妻被交换粗又大又硬视频欧美| 欧美日韩精品三区| 久久在线精品| 老司机aⅴ在线精品导航| 蜜月aⅴ免费一区二区三区| 老司机精品福利视频| 美日韩免费视频| 亚洲国产精品电影| 亚洲伦伦在线| 欧美一区视频| 麻豆精品一区二区综合av| 欧美激情综合五月色丁香| 欧美日韩亚洲系列| 国产一区二区你懂的| 亚洲人成亚洲人成在线观看图片| 在线视频亚洲一区| 久久久青草青青国产亚洲免观| 欧美日韩在线看| 国产日韩欧美综合精品| 永久免费精品影视网站| 亚洲天堂av在线免费| 久久天天躁狠狠躁夜夜av| 亚洲国产精品一区二区第一页| 夜夜狂射影院欧美极品| 久久精品国语| 国产精品国产自产拍高清av| 亚洲国产精品免费| 欧美一区二区三区精品| 91久久精品美女高潮| 欧美中在线观看| 国产精品久久久久久模特| 91久久精品国产91久久性色tv| 亚洲欧美视频一区二区三区| 亚洲成色精品| 久久爱www.| 国产精品一区在线观看| 99re国产精品| 欧美国产免费| 久久久久欧美精品| 国产亚洲免费的视频看| 午夜精品www| 日韩一区二区久久| 欧美激情一区二区久久久| 韩日成人av| 久久成人资源| 亚洲中午字幕| 国产精品久久久久久久午夜片| 99riav国产精品| 亚洲激情小视频| 免费久久99精品国产自| 黄色亚洲免费| 久久久国产91| 欧美综合激情网| 激情文学综合丁香| 老司机免费视频一区二区| 欧美亚洲一区三区| 国产日韩欧美日韩| 久久国产乱子精品免费女| 亚洲在线观看视频| 国产麻豆综合| 久久久91精品国产一区二区三区| 欧美一级视频| 激情婷婷亚洲| 亚洲激情视频网| 欧美色中文字幕| 亚洲一区三区电影在线观看| 在线视频亚洲一区| 国产精品一区免费观看| 久久久精品一区二区三区| 久久国产一区| 亚洲狠狠婷婷| 亚洲美女视频| 国产精自产拍久久久久久蜜| 久久精品视频网| 美女精品自拍一二三四| 亚洲精品欧美精品| 中文一区二区| 久热精品视频在线观看| 亚洲国产一区在线| 一本大道av伊人久久综合| 国产精品揄拍一区二区| 久久久久一区| 欧美日韩国产经典色站一区二区三区| 亚洲一区二区三区影院| 欧美亚洲尤物久久| 亚洲靠逼com| 亚洲欧洲av一区二区| 亚洲成人在线网| 在线中文字幕一区| 在线日韩av| 亚洲影院一区| 亚洲激情一区| 午夜在线成人av| 亚洲精品免费在线| 欧美亚洲综合网| 一本色道久久综合亚洲91| 欧美亚洲视频| 亚洲一区二区黄色| 噜噜噜久久亚洲精品国产品小说| 亚洲色图在线视频| 麻豆久久久9性大片| 亚洲欧美在线一区| 男女视频一区二区| 久久精品久久综合| 欧美午夜精品久久久久久浪潮| 久久午夜精品一区二区| 国产精品成人午夜| 亚洲激情一区| 在线精品视频一区二区| 亚洲尤物在线视频观看| 亚洲色无码播放| 欧美成人a视频| 久久久久久久网站| 国产精品毛片一区二区三区 | 欧美成人一区二免费视频软件| 亚洲一二三区在线观看| 久久综合久久88| 久久久精品国产99久久精品芒果| 欧美日韩国产黄| 91久久久久久久久| 亚洲经典在线看| 久久久www成人免费精品| 欧美一级欧美一级在线播放| 欧美日韩另类丝袜其他| 亚洲黄色免费网站| 亚洲激情专区| 欧美高清视频一二三区| 欧美肥婆bbw| 亚洲电影在线免费观看| 久久久五月天| 欧美va天堂| 亚洲欧洲日韩在线| 欧美黄色aa电影| 亚洲国产欧美一区二区三区久久 | 久久久亚洲欧洲日产国码αv| 欧美一区免费| 性欧美超级视频| 午夜久久美女| 国产麻豆精品theporn| 亚洲欧美网站| 久久亚洲精选| 亚洲国产精品视频一区| 免费黄网站欧美| 日韩视频中午一区| 亚洲欧美日韩精品一区二区| 国产精品一卡二卡| 久久激情中文| 亚洲激情另类| 亚洲一区欧美一区| 国产亚洲一级高清| 久久综合伊人77777蜜臀| 亚洲国产精品第一区二区| 一本色道久久综合亚洲精品小说| 欧美日韩一区二区视频在线观看| 一区二区三欧美| 久久久精品动漫| 日韩一级精品| 国产精品人人做人人爽人人添| 亚洲欧美日韩精品久久久| 久久综合影音| 99精品免费视频| 国产区亚洲区欧美区| 久久久综合精品| 99国产一区| 久久免费高清| 一区二区激情| 狠狠色综合色区| 欧美日韩国产综合新一区| 午夜免费在线观看精品视频| 欧美丰满少妇xxxbbb| 亚洲免费综合| 1000部精品久久久久久久久| 欧美日韩一本到| 久久精品网址| 亚洲影院色无极综合| 亚洲国产成人精品视频| 亚洲欧美日韩综合| 亚洲级视频在线观看免费1级| 国产精品免费网站在线观看| 久久蜜桃香蕉精品一区二区三区| 亚洲精品欧美| 免费成人av| 性久久久久久久| 亚洲免费福利视频| 国产亚洲欧美一区在线观看| 欧美精品一区二区三区蜜臀| 欧美一区二区啪啪| 亚洲网站在线观看| 亚洲青色在线| 欧美寡妇偷汉性猛交| 久久电影一区| 亚洲一区二区三区高清不卡| 亚洲韩国一区二区三区| 国产一区视频在线观看免费| 国产精品99一区| 欧美激情网站在线观看| 久久久91精品| 久久成人精品| 欧美在线播放视频| 午夜精品久久久久久|