DELPHI是不是管的太多了? |
尚未結案
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
程式碼編譯後在執行時會被忽略, 這是編譯器最佳化的功能.
但是如果你的變數 p 在 for 迴圈之後有用到的話, 這 p := i; 就不會被忽略掉. 最好貼出較為完整的程式碼, 才能探究真正的原因. 雪龍
http://bestlong.no-ip.com/
學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
var Form1: TForm1; p: Integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var k,i: Integer; begin k := 0; for i:=0 to 100 do k:=k i; p:=i; end; procedure TForm1.Button2Click(Sender: TObject); begin Caption := IntToStr(p); end;這樣不會被最佳化掉, procedure TForm1.Button1Click(Sender: TObject); var k,i,p: Integer; // 這樣就會被最佳化掉 begin k := 0; for i:=0 to 100 do k:=k i; p:=i; end; |
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
引言: p在后面的代码做为数组的下标,一定有用. 我试了很多方法,最后发现,我将p := i;改成p := i 1 - 1;就行了,真是怪.不知是不是BUG. 如果哪位大大有遇到与我一样的现象,谈谈你的看法.是否一定有用, 沒有程式碼沒有真相. 當 p := i 之後的程式碼都沒有用到 p 變數, 就有機會被忽略. 希望都不要被最佳化, 可以調整專案的設定, 強制全面編譯. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
引言:不好意思, 您這樣的程式. 可以表達變數的生命週期與有效範圍. 並不太適合說明編譯最佳化的現象. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶var Form1: TForm1; p: Integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var k,i: Integer; begin k := 0; for i:=0 to 100 do k:=k i; p:=i; end; procedure TForm1.Button2Click(Sender: TObject); begin Caption := IntToStr(p); end;這樣不會被最佳化掉,procedure TForm1.Button1Click(Sender: TObject); var k,i,p: Integer; // 這樣就會被最佳化掉 begin k := 0; for i:=0 to 100 do k:=k i; p:=i; end;
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
幾篇有談到編譯最佳化的文章. http://delphi.ktop.com.tw/topic.php?topic_id=48303
http://delphi.ktop.com.tw/topic.php?topic_id=66176
http://delphi.ktop.com.tw/topic.php?topic_id=48239 雪龍
http://bestlong.no-ip.com/
學海無涯覺無盡,勤做筆記防失憶 發表人 - bestlong 於 2005/08/23 21:45:26
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
a6475
高階會員 發表:67 回覆:230 積分:154 註冊:2002-09-15 發送簡訊給我 |
這個是變數生命週期的問題吧。
程式一開始就有宣告
var
Form1: TForm1;
p: Integer; //假設叫綠色p 所以在
procedure TForm1.Button1Click(Sender: TObject);
var
k,i: Integer;
begin
k := 0;
for i:=0 to 100 do
k:=k i;
p:=i; //這個p是綠色的p
end; procedure TForm1.Button1Click(Sender: TObject);
var
k,i ,p: Integer; // 這樣就會被最佳化掉
begin
k := 0;
for i:=0 to 100 do
k:=k i;
p:=i; //這個p是程序裡的p,跟p是無關的,而且由於後面都沒有用到,當然會被最佳化掉。
end; procedure TForm1.Button2Click(Sender: TObject);
begin
Caption := IntToStr(p); //不論是用上面那一種,這個p一定是綠色的p
end; ..-----------βλμε------------..
◎Oo月夜 光明 藍更愁oO◎ 藍調月光城v4:http://inping.myweb.hinet.net/ (暫時使用中..) 明日報(藍調.月光):http://mypaper2.ttimes.com.tw/user/a6475 發表人 - a6475 於 2005/08/24 11:37:41 發表人 - a6475 於 2005/08/24 11:40:32
------
月夜 光明 藍更愁 |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |