Yahoo 知識+ 將於 2021 年 5 月 4 日 (美國東岸時間) 停止服務,而 Yahoo 知識+ 網站現已轉為僅限瀏覽模式。其他 Yahoo 資產或服務,或你的 Yahoo 帳戶將不會有任何變更。你可以在此服務中心網頁進一步了解 Yahoo 知識+ 停止服務的事宜,以及了解如何下載你的資料。

ㄚ旺
Lv 5
ㄚ旺 發問於 電腦與網際網路程式設計 · 1 十年前

這段程式碼,是否為最佳化?

以下

while(b[c]=a[c++]);

是否為最佳化程式碼?

void main(void )

{

char *a=\"abcdefghijklmnopqrstuvwxyz\";

char b[27];

int c=0;

while(b[c]=a[c++]);

printf(\"%s\",&b);

getch();

}

6 個解答

評分
  • Dave
    Lv 7
    1 十年前
    最愛解答

    說真的,這個寫法,跟:

    int c = 0;

    do

    {

    b[c] = a[c];

    c++;

    }

    while( b[c] != 0 )

    對一個 compiler 來說都是一樣的,所以 compile 出來的程式也是一樣的快…

    而現今 compiler 有內建 optimization,這些 optimization 很好玩,你的程式用愈普通的方法去寫,它愈有可能看得懂你的程式在作什麼,才更容易 optimize… 所以建議你不用想說用一些比 "厲害" 的方法去寫 code,你省的只是你原始檔的大小而已,作出來的程式並不一定會比較快…

    2006-08-22 07:51:11 補充:

    要是有興趣看一些難看得懂的C Code的話:http://www0.us.ioccc.org/main.html

    2006-08-22 08:00:54 補充:

    計算 3.141

    http://www0.us.ioccc.org/1988/westley.c

  • ㄚ旺
    Lv 5
    1 十年前

    Dave大大PO的

    http://www0.us.ioccc.org/main.html

    剛剛看了一些笑到肚子痛

    感謝分享

  • ?
    Lv 7
    1 十年前

    支持 dave, email, novus 99%以上的說法。

    唯一不〝太〞支持的那 1% 不是真的不支持,是在這麼短的描述下,他們可能不便描述得清楚。

    我〝覺得〞有漏洞。

    簡言之,不找特例、不挑小細節的話,他們說的我全都 100% 支持喔!

    2006-08-21 21:24:10 補充:

    〝程式的小沒人比的過 〞

    有喔!以前 Apple ][ 的時代有 一列程式大賽!

    有人能畫出中華民國國旗、

    有人能讓使用者輸入角度、力量。而程式用高解析畫出用一個人用那角度、力量投出的球的軌跡。

    用組合語言不等於最佳化!

    我也曾經是用組合語言吃飯的程式師。

    最佳化的定義是像 Email 寫的那樣!

    2006-08-21 21:28:29 補充:

    組合語言本身也有〝專門的〞最佳化的問題。

    像 iApx 的

    Mov AX 0

    就不是最佳化的碼!

    XOR AX AX

    效果和它一樣,但速度比它快!

    = = = =

    組合語言的確很快,但儘是約 200 倍左右的速度。

    在大資料量下,好的演算法甚至可以快上數兆倍以上!!!

  • 1 十年前

    什麼較快什麼較最佳化

    你為何不直接寫電腦看的懂得0跟1

    或者適用組合語言寫

    快沒人比的上

    程式的小沒人比的過

    功能的強大,在於設計師個人

    想了解推薦你去看組合語言的藝術這本書那時候你就能了解了

  • ?
    Lv 6
    1 十年前

    K&R 的經典範例

    while (*a++ = *b++);

    這種寫法拿來當示範當然很好玩,可以使學習者認識指標強力的一面

    但是實際上要寫個強韌的程式沒有人會這樣**

    編譯最佳化的技術近年來有很大的突破

    基本上我還是相信編譯器的能力

    如果上面的程式要快一點

    還有改良的空間

    例如在32位元的處理器上,一次搬運4 Byte理論上會比上面的程式快4倍;在64位元的處理器上,一次搬8 Byte會比上面的程式快8倍

  • ?
    Lv 6
    1 十年前

    我只能說賣弄程式技巧的都不是好程式。而且這個程式問題一堆,程式怎樣當掉的,會當的讓你感到莫名其妙。

    不是寫法緊湊就是最佳化,最佳化的意思是時間用時最短,消耗的資源最少(指CPU資源、記憶體資源)。

還有問題嗎?立即提問即可得到解答。