Yahoo 知識+ 將於 2021 年 5 月 4 日 (美國東岸時間) 停止服務,而 Yahoo 知識+ 網站現已轉為僅限瀏覽模式。其他 Yahoo 資產或服務,或你的 Yahoo 帳戶將不會有任何變更。你可以在此服務中心網頁進一步了解 Yahoo 知識+ 停止服務的事宜,以及了解如何下載你的資料。
這段程式碼,是否為最佳化?
以下
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 個解答
- DaveLv 71 十年前最愛解答
說真的,這個寫法,跟:
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
- ?Lv 71 十年前
支持 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 倍左右的速度。
在大資料量下,好的演算法甚至可以快上數兆倍以上!!!
- 永恆的破壞Lv 51 十年前
什麼較快什麼較最佳化
你為何不直接寫電腦看的懂得0跟1
或者適用組合語言寫
快沒人比的上
程式的小沒人比的過
功能的強大,在於設計師個人
想了解推薦你去看組合語言的藝術這本書那時候你就能了解了
- ?Lv 61 十年前
K&R 的經典範例
while (*a++ = *b++);
這種寫法拿來當示範當然很好玩,可以使學習者認識指標強力的一面
但是實際上要寫個強韌的程式沒有人會這樣**
編譯最佳化的技術近年來有很大的突破
基本上我還是相信編譯器的能力
如果上面的程式要快一點
還有改良的空間
例如在32位元的處理器上,一次搬運4 Byte理論上會比上面的程式快4倍;在64位元的處理器上,一次搬8 Byte會比上面的程式快8倍
- ?Lv 61 十年前
我只能說賣弄程式技巧的都不是好程式。而且這個程式問題一堆,程式怎樣當掉的,會當的讓你感到莫名其妙。
不是寫法緊湊就是最佳化,最佳化的意思是時間用時最短,消耗的資源最少(指CPU資源、記憶體資源)。