推 VictorTom:VC的debug mode會把區域變數初始化為0xcccccccc, 動態要 12/16 00:29
→ VictorTom:來的初始化成0xcdcdcdcd; 你可以下break用watch看:) 12/16 00:30
→ dp2:支持VT。。我好想不能推文了 12/16 00:34
推 oddguy:這個程序……請仔細看,對于a1是分配了一個未初始化的local 12/16 00:41
推 VictorTom:樓上要cd一下才能再推文XD 該技能要冷卻時間才能再用XDD 12/16 00:41
→ oddguy:變數x,對于a2則是另外又再分配了一個未初始化的變數x啊 12/16 00:42
→ nowar100:兩個是不同的物件阿 XD 12/16 00:43
→ oddguy:兩者絕不是同一個x!所以當然不會是差1了 12/16 00:43
→ VictorTom:存取未初始化的變數應該是發warning, 不是exception@_@" 12/16 00:43
→ QQ29:兩個是同一個x吧~ 我印他們位址是一樣的阿 12/16 00:43
→ oddguy:實際上a1.XD()執行完畢后,local變數x已經不存在了。 12/16 00:44
→ oddguy:你只要用&x打印出兩次變數x的地址來就明白了 12/16 00:45
→ QQ29:位址一樣阿....function只有一份不是嗎 12/16 00:46
→ oddguy:位址一樣是由于程序簡單而碰巧的。或者是編譯器優化的結果 12/16 00:48
→ QQ29:V大意思是 int x;他會初始成cc...c所以都會同一個值? 12/16 00:49
→ weiyucsie:請不要假設x的初始值... 12/16 00:50
→ QQ29:位址不會不一樣吧 函數的位址一樣,local 變數的 offset 也一 12/16 00:50
→ QQ29:一樣 不是嗎 12/16 00:51
推 Ag2S:位址沒有一定一樣阿 如果是說 function的text是一樣 12/16 00:53
→ Ag2S:但local variable是在stack裡 要看OS怎麼配置stack吧 12/16 00:53
→ dp2:就算位址一樣,編譯器也可以插入代碼來初始化這些變量…… 12/16 00:53
→ dp2:雖然我不是很確定這個老舊的編譯器是怎麼做的.. 12/16 00:54
→ dp2:referred to VC6 + debug 12/16 00:54
推 VictorTom:直接回應一篇好了, 騙騙文章數, 快破百了....XD 12/16 00:55
→ oddguy:假如在a1.XD()和a2.XD()之間還有別的內存操作 12/16 00:55
→ oddguy:x的位址大概就不一樣了 12/16 00:55
推 VictorTom:單純的內存操作應該還好, 要影響到ESP才會看到吧@_@" 12/16 00:58
→ VictorTom:不過這種測試的code, 千萬都別真的實際使用就是了XD 12/16 00:59
推 ledia:運氣好位址就會一樣, 但是寫程式不能靠絲毫的運氣 12/16 01:07
→ QQ29:可是如果位址不一樣 如果我有一百萬個A物件 那不就有一百萬個 12/16 01:17
→ QQ29:位址的可能性了嗎? function不是在compile時就配置好大小了? 12/16 01:18
→ nowar100:function配好的位置是code的部分,實際在跑是stack部分 12/16 01:19
→ nowar100:位址一樣只是巧合,你可以先call一個function f 12/16 01:20
→ nowar100:理面直接再call a2.XD(); 你就會發現位址不一樣了 12/16 01:20
推 VictorTom:推n板大的解釋:) 也推disasm trace進組語層來看:) 12/16 01:22
→ QQ29:可是我測試版大的程序 位址也還是一樣阿... 12/16 01:27
→ QQ29:stack 難道不能定死說一定只在那個位址作存取嗎? 12/16 01:27
→ QQ29:如果位址會不一樣 那為啥要討論 critical section呢@@ 12/16 01:28
推 VictorTom:stack不是你管的, 那是OS隨run time排給你的.... 12/16 01:28
→ VictorTom:所以沒有你要求一定要用stack哪裡這種事情:) 12/16 01:29
→ QQ29:OS排給我可是我同一個process stack就應該一樣不是嗎@@ 12/16 01:30
推 ledia:當然不是啦~~~ 12/16 01:47
→ ledia:中間可能有執行其它東西先疊進 stack 呀 12/16 01:49
→ ledia:簡單問一下, 如果 XD 裡面又呼叫 XD (傳說中的遞迴) 12/16 01:50
→ ledia:照你所說的樣子的話, 我要怎麼樣才能弄出獨立的變數呢 ? 12/16 01:50
→ ledia:是各層 function call 都要存不同值的變數喔 12/16 01:51