日韩性视频-久久久蜜桃-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在某种特定条件下的优化的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 免费在线不卡视频 | 韩国三级视频在线观看 | 色香蕉在线 | 亚洲 高清 成人 动漫 | av手机在线看 | 久久精品欧美一区二区三区不卡 | 日本少妇裸体做爰高潮片 | 女人喷潮完整视频 | 国产免费激情 | 日本成人午夜 | 成人a网站| 操操干| 不卡的av在线免费观看 | 肉丝美脚视频一区二区 | 国产麻豆午夜三级精品 | 在线观看av黄色 | 福利一区二区在线观看 | 久久免费视频一区二区 | 特级毛片在线观看 | 中文字幕在线观看91 | 国产aaa级片 | 亚洲国产精品久久久久久6q | 美女久久久久久久久 | 色在线视频 | 美女黄色大片 | www婷婷av久久久影片 | www国产精品视频 | 鬼灭之刃柱训练篇在线观看 | 69热在线| 国产成人亚洲精品自产在线 | 亚洲天堂久久久 | 天天爽影院 | 久久久无码一区二区三区 | 91亚洲一区 | 天天色av | 成人一区二区在线 | 91欧美日韩| 久久夜色精品 | 久久亚洲精品无码va白人极品 | 成人欧美一区二区三区黑人 | 一级特黄aa大片欧美 | www.999av| 国产精品视频观看 | 色吧五月天 | 小明看国产 | 超清av| 欧美日韩网 | 日本h视频在线观看 | 鲁丝一区二区三区 | 成人国产精品一区 | 天堂√在线 | 日本美女视频网站 | 成人黄页网站 | 一级人爱视频 | 祥仔视觉av | 免费一级片 | 欧美日韩国产一区二区在线观看 | 女人脱裤子让男人捅 | 另类专区成人 | 91免费黄色 | 久久国产乱 | 少妇高潮一区二区三区在线 | 自拍偷拍另类 | 午夜丰满寂寞少妇精品 | a黄色片 | 欧美一级在线观看视频 | 日韩福利视频在线观看 | 懂色av成人一区二区三区 | 国产天天骚 | 免费av一区 | 国产jzjzjz丝袜老师水多 | 一级片黄色 | 多毛的亚洲人毛茸茸 | 日韩欧美综合一区 | 视频黄页在线观看 | 韩国一区二区在线播放 | 国产精品桃色 | 中文字幕欧美人妻精品一区蜜臀 | 午夜网站免费 | 最新免费黄色网址 | 性色在线 | 人妻互换一区二区三区四区五区 | 欧美在线免费观看 | 久久久久亚洲无码 | 少妇视频在线观看 | 精品视频一区二区三区 | 天堂网在线观看视频 | 亚洲欧洲日本在线 | 亚洲综合影院 | 成人免费91 | 中文字幕无码毛片免费看 | 操操操插插插 | 久久艹在线| 波多野结衣视频播放 | 亚洲影院一区二区三区 | 在线成人观看 | 国产免费一区 | 九一九色国产 | 久久99精品国产.久久久久久 |