English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

請問一下
如果我程式碼如下
void main ()
{
int a;
char b;
}

結果出來
&a 是0012FF7C
&b 是0012FF80

問題1. 請問0012 是segment address 而 FF7C 是offset address 對否?
問題2. 如果把同樣的程式拿到其他電腦上compile過 run 後所呈現出來的值是否會相同??
如果不同 是否是 segment 改變而 offset 不改變?
問題3. 請問如果上題改變了是因為OS 的緣故 或是 compiler 緣故 還是硬體緣故?

2006-08-31 15:27:55 · 4 個解答 · 發問者 .ohoh 1 in 電腦與網際網路 程式設計

謝謝 樹先生
還想請問一下 您的第二個回答
"如全域變數 就不會改變" 是什麼意思?
是說拿道別台電腦 compile run 以後 全域變數的
值會和另一台的位置完全相同嗎??
覺得好像是我誤會了 ,但是還是不太了解您的意思
謝謝您的回答

2006-09-01 12:54:24 · update #1

4 個解答

問題1. 請問0012 是segment address 而 FF7C 是offset address 對否?
你所說的是真實模式架構
可惜的是0012FF7C是虛擬記憶體
在保護模式下記憶體位置並不是像你想的 要解釋蠻複雜的
自己查資料嚕
問題2. 如果把同樣的程式拿到其他電腦上compile過 run 後所呈現出來的值是否會相同??
不一定 因為是區域變數 由程式執行後配置
如全域變數 就不會改變

如果不同 是否是 segment 改變而 offset 不改變?

不是

問題3. 請問如果上題改變了是因為OS 的緣故 或是 compiler 緣故 還是硬體緣故?

因為是區域變數 由程式執行後配置

2006-09-01 02:19:05 · answer #1 · answered by ? 4 · 0 0

回阿旺 抱歉 那個記憶體位置是我隨便寫的 沒有注意到順序 真抱歉

2006-09-01 12:47:52 · answer #2 · answered by .ohoh 1 · 0 0

我的的電腦VC6 compiler 結果出來是
&a 是0x12FF7C
&b 是0x12FF78
這兩個都應該是32Bit 的offset 而非segment + offset 後來又再Windows開了一些應用軟體視窗,結果仍是一樣。

若是用DOS 16bit TC 編譯出來結果
&a 是FFF4
&b 是FFF3
而SS為0x25f6


這時候就有點納悶.....一般來講,C language 編譯內部動態變數與函式參數,都應該是向後堆疊,因此變數b的位址應該會比變數a更前面才對吧!
能否知道你的編譯器是哪一種...

2006-08-31 22:35:24 · answer #3 · answered by ㄚ旺 5 · 0 0

變數的位址是由作業系統所指定的,所以不相同
通常寫程式,變數被指定至哪一個位址,是由作業系統來管理

問題1.(要查 debug 相關書本)
問題2.不相同
問題3.作業系統

2006-08-31 15:38:59 · answer #4 · answered by Big_John-tw 7 · 0 0

fedest.com, questions and answers