日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

strcat在某种特定条件下的优化

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 strcat在某种特定条件下的优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

strcat是C語言一個基本的字符串操作函數,它的源代碼一般是這樣的。

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

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

我找到一個辦法,字符串追加時,事先給出目標字符串結尾所在的位置,追加時,也就不用從頭開始計算其長度了,復制的過程中,目標字符串的結尾也隨之移動,下一次再追加也就可以使用它了。以下就是優化過的string_append,與strcat相比,增加了一個整形指針以傳遞目標字符串長度的地址。飛鴿傳書:http://www.freeeim.com/,strcat在某種特定條件下的優化。

?

/*
?* 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 *p = dest + *end;
??????? while ( *p++ = *src++ ) (*end)++;
??? }
??? return dest;
}

經試驗,string_append在大數組重復追加內容的情形下,優勢非常明顯。其它情形下,使用原來的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 *p = 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

總結

以上是生活随笔為你收集整理的strcat在某种特定条件下的优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产女人精品视频 | 欧美少妇一区二区 | 日韩午夜视频在线观看 | 午夜高潮视频 | 中国无码人妻丰满熟妇啪啪软件 | 高清日韩一区 | 大奶子在线 | 中文人妻一区二区三区 | 免费成人在线视频观看 | 欧美日本在线视频 | 久久这里只有精品8 | 亚洲免费av在线 | 亚洲一卡二卡三卡四卡 | 亚洲一区有码 | 亚洲精品一区 | 精品国产aⅴ一区二区三区四川人 | 狠狠干超碰 | 久草资源网 | 日韩一区二区欧美 | 中文字幕亚洲一区 | 日本亚洲一区二区三区 | 国产操比视频 | 午夜九九 | 狠狠干2022 | 国产免费看 | 亚洲激情图| 国产v综合v亚洲欧美久久 | 警察高h荡肉呻吟男男 | www.亚洲一区二区三区 | 毛片网站在线播放 | 国产精品正在播放 | 日本三级理论片 | 久久9966 | 欧日韩不卡在线视频 | 就操成人网 | 97色伦图片| 日韩免费观看一区二区三区 | 特级做a爰片毛片免费69 | 夜夜嗨老熟女av一区二区三区 | 国产私拍| www伊人网 | 久久午夜夜伦鲁鲁片无码免费 | 超碰人人澡 | 熟女少妇一区二区三区 | 久久伊人成人 | 国产a自拍 | 国产中文字幕三区 | 91精品国产综合久久国产大片 | 色花av| 三级黄色免费网站 | 全部免费毛片在线播放高潮 | 国产三区四区视频 | 最新中文字幕第一页 | 人人干免费 | 97综合视频| 精品一区二区三区无码视频 | 国产欧美一级片 | 欧美一级黄色片 | 午夜剧场在线 | 欧美最黄视频 | 日韩中文字幕在线观看 | 国产精品久久久久99 | 欧洲精品无码一区二区 | 国产精品区二区三区日本 | 亚洲性天堂 | 亚洲a∨无码无在线观看 | 亚洲a中文字幕 | 狠狠干狠狠爱 | 99re在线播放| 免费在线播放 | 亚洲视频黄色 | 日韩视频在线观看视频 | 在线视频97 | 午夜免费视频网站 | 日韩性高潮 | 超碰福利在线 | 亚洲成人基地 | 天天色天 | 午夜一区二区三区免费观看 | 日韩无遮挡 | 免费观看一区二区 | 黄色片免费视频 | 青青青草视频在线观看 | 九色网站在线观看 | 男人用嘴添女人下身免费视频 | 欧美人与动物xxxxx | av片一区二区 | 红猫大本营在线观看的 | 国产探花一区二区 | 日本体内she精高潮 男女视频在线免费观看 | 蜜桃在线一区 | 亚洲视频二 | 成人免费高清在线观看 | 少妇的性事hd | 亚洲另类av | 九九久久精品 | 香蕉尹人 | 黑人巨大av| 日日摸夜夜 |