C-style 字串的最佳化
C-style 字串的最佳化有許多途徑,Timo Sirainen 撰寫的 [
Secure, Efficient and Easy C programming] 是相當值得一看的文章,在實務應用上,不僅要避免 string operation 引來的 buffer overflow 外,又得避免大量的小段記憶體配置片段,這會造成 memory leaking,再來,針對特定的應用場合,如 heavy traffic networking 的環境,勢必需要發展一系列的機制來克服以上的議題。[
Vstr] 這個最佳化的字串處理函式實做,有許多相當值得一看的資訊,如 [
String library comparison] 比較了許多開放的實做,並且在 [
Speed comparison of Vstr vs. other string APIs] 提及其比較的方法與參考實做,然而,選對 library,就意味著解決問題了?當然不是。
「最佳化」是個複雜的議題,但是這裡不打算提 global optimization,而在 gtk-devel mailing-list 上,Daniel Marjamäki 提出一個想法: [
RFC: String cleanup],敘及原本的:
更換成:
可產生比較直覺的機械碼,可提昇 CPU 效能與記憶體使用。這引來 iolo 的進一步思考: [
Isn't C wonderful?],他舉出以下的程式碼片段:
static const char *str1 = "azerty";
static const char str2[] = "azerty";
void f(const char *x);
void try(void) {
f(str1);
f(str2);
}
透過 GCC 產生組譯碼:
我將輸出用 OpenOffice Impress 做了對應比較:

在組譯碼可以發現,C compiler 對於 const char [] 會生成直接的輸出,並且字串的操作也較直覺,相對的,const char * 在語意上是 pointer,而 C compiler 則予以 indirect access,這需要留意。
由 jserv 發表於 December 17, 2005 11:40 PM