全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1195
推到 Plurk!
推到 Facebook!

BCB 6 Compiler Bug

尚未結案
JasonTsay
一般會員


發表:1
回覆:1
積分:0
註冊:2003-04-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-25 18:36:59 IP:59.120.xxx.xxx 未訂閱
最近在公司寫一個Service,一直有記憶體越吃越多的問題 今天終於找到原因了 有興趣的自己試試 NEW一個新的APPLICATION 加一個按鈕,在按鈕事件寫上 AnsiString temp; for(int i=0;i<99999;i ) { temp="123456"; temp=(temp==""?AnsiString("00000000"):AnsiString("FF") temp); } 寫完後,執行,打開工作管理員 找出你剛剛寫的程式 然後按下按鈕,你會發現,記憶體越吃越多 都不會釋放 如果將?:改成if else 就正常 問題是?:不是ANSI C 就應該可以正常執行了嗎 這算是Compiler 的 Bug吧!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-25 18:55:13 IP:210.68.xxx.xxx 未訂閱
您好:    用您的程式在我這邊測試的結果並沒有記憶體越吃越多的情況出現耶
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-25 19:59:55 IP:140.113.xxx.xxx 未訂閱
哈哈哈~真是有趣    我用下列程式碼測試,測試環境 WinXP w/ SP2 + BCB 6 w/SP4, RAM 1.0 GB    
#define IF_COND
AnsiString temp;
for(int i=0;i<100000000;i++)
{
temp="123456";
#ifndef IF_COND
temp=(temp==""?AnsiString("00000000"):AnsiString("FF")+temp);
#else
if(temp=="")
  temp=AnsiString("00000000");
else
  temp=AnsiString("FF")+temp;
#endif
}
結果就如JasonTsay的一樣,用 ? : 跑沒兩下,記憶體全被灌爆 < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=23662187&CC=529193"> 若是改為 if...else,跑到迴圈結束都沒事(記憶體使用量沒有劇烈增加)。 難道真的是compiler bug??我有追過組語,但是時間不多,沒有很清楚 ? : 運算子在呼叫 AnsiString 建構子後,到底有沒有正確的呼叫解構子~ 發表人 - arisaka_matsuri 於 2005/07/25 20:08:16
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-26 02:20:14 IP:221.169.xxx.xxx 未訂閱
有意思,如果是 temp=(temp==""?AnsiString("00000000"):"FF" temp); 記憶體使用量沒有劇烈增加 Andy Chang
------
Andy Chang
JasonTsay
一般會員


發表:1
回覆:1
積分:0
註冊:2003-04-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-26 14:52:08 IP:61.63.xxx.xxx 未訂閱
引言: 您好: 用您的程式在我這邊測試的結果並沒有記憶體越吃越多的情況出現耶 >< face="Verdana, Arial, Helvetica"> 怪了,我試了好幾台都會 Win2k SP4 WinXP 都會,每按一次按鈕就會增加記憶體 您可能多按幾次就會發現囉
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-26 15:34:08 IP:210.68.xxx.xxx 未訂閱
引言: 怪了,我試了好幾台都會 Win2k SP4 WinXP 都會,每按一次按鈕就會增加記憶體 您可能多按幾次就會發現囉
我這邊的情況是每按一次就會增加,過幾秒後就恢復了 按很多下也是一樣耶,過幾秒就又恢復了
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-29 16:00:59 IP:61.220.xxx.xxx 未訂閱
的確...用JasonTsay 的方法.工作管理員.處理程式那邊可以看到記憶體增大. 但過幾秒卻不會恢復..平均每按一下增加1.600K左右. 改成andychang1690的這行 temp=(temp==""?AnsiString("00000000"):"FF" temp); 就不會增加了.. 改成IF果真不會增加.. if (temp=="") temp = AnsiString("00000000"); else temp = AnsiString("FF") temp; 還真有趣..是Compiler BUG還是其他問題阿? 發表人 - pireer 於 2005/07/29 16:05:56
系統時間:2024-05-18 7:48:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!