Re: [問題] 宣告的記憶體位址在windos跟linux差異

看板C_and_CPP作者 (特命係長摩野仁)時間11年前 (2012/09/06 02:02), 編輯推噓5(507)
留言12則, 9人參與, 最新討論串2/3 (看更多)
※ 引述《NullLife (下雨的晚上)》之銘言: : 剛剛我在上課,老師講了一個東西讓我非常困惑不已... : 因為我非本科系出身,只是對寫程式很有興趣去自修的, : 對指標、記憶體位址有基本的認識,然後剛剛老師在suse下用Anjuta在講c的指標 : 就隨便寫了一個很簡單的內容: : int x=77; : printf("%p", &x); : > 0x7fff4c64a0ac : 秀出位址給我們看,然後就把秀出來的位址 0x7fff4c64a0ac 複製回程式裡... : printf("%d", *((int*)0x7fff4c64a0ac)); 其實我不了解 suse 跟 anjuta 是什麼 但是我大概可以了解原po老師想要表達的概念 第一個是 cast operator (建議不熟的話先去了解一下) 原po知道pointer(指標)也需要知道所指位址的資料型態吧 如果原po老師 使用的是 double x=77.0 ; 那麼(int *)就要變成(double *)了 (不知道該不該把pointer的全部說明打出來 = =) ((int *)0x7fff4c64a0ac)的意思是 一個指標指向 0x7fff4c64a0ac 這個位址 (the pointer points to an integer variable) 然後利用 indirect 的方式 (整串前面在加個* 這應該不用我在說明吧 = =) *((int *)0x7fff4c64a0ac) <= 取出存在這個位址裡面的數值 : 打算直接叫出位址裡的東西給我們看... : 當下我疑問就很大,不是每次宣告的時候,系統才配發給我們位址嗎? 應該是說 不同的電腦 分配的記憶體位址本來就不會相同(吧) = =" : 想當然是失敗了,不過老師卻很肯定只要程式沒更動,每次執行就會拿到同樣的位址, 他的意思應該是說在同一台電腦 跑同一個程式 (說真的我自己還沒讀到記憶體分配的章節 所以也不清楚) : 所以他回到windos用devcpp寫了一樣的程式碼, : 但這次就真的是每次執行,拿到x的位址就都是一樣了, : 把位址寫死可以去拿到x的值... 因為x的值存在那個位址阿 = = (這 這不知道怎麼說明 = =) : 於是老師就說可能是os的演算法有差異造成的... 應該不是 這跟演算法好像沒有關聯 = =" : 可是我又問說這樣很奇怪,如果說我這樣把位址寫死, : 拿到另一台電腦上執行不會有問題嗎? 老師卻說不會... 其他台電腦分配給 int type 變數 x 的記憶體位址可能不同 但是分配完之後x的位址就是固定他分配的那個位址 (這應該是你有問題的地方吧?) 所以在同一台電腦跑這個程式 一直去取那個位址的值 一直都會是77 這樣(?) 對於我的回應我自己也很多問題 (汗) : 這樣我疑問很大啊,怎麼可能每次位址都一樣?? : 可是在windos底下的情況的確又是這樣, : 想請問各位前輩到底是什麼情況呢?? 如果有錯誤的地方也請各位前輩幫忙指正 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.105.164

09/06 02:38, , 1F
你不能說分配之後就是固定的,這本身就是有問題的講
09/06 02:38, 1F

09/06 04:45, , 2F
一天又平安的過去了,感謝虛擬記憶體的努力 (誤
09/06 04:45, 2F

09/06 06:33, , 3F
為了達到同一起始位址, 還要去驗證一些假設前題, 這不是
09/06 06:33, 3F

09/06 06:34, , 4F
在搞自己嗎?
09/06 06:34, 4F

09/06 08:51, , 5F
SuSE => 一個頗知名的 Linux distro,Anjuta 是 GTK based
09/06 08:51, 5F

09/06 08:52, , 6F
IDE,有整合 autotools、Glade
09/06 08:52, 6F

09/06 08:57, , 7F
其實程式內容我完全都懂 只是老師這樣講記憶體位址搞混了
09/06 08:57, 7F

09/06 08:58, , 8F
我,又發生windos卻是同樣位址的情況 所以我的問題在這
09/06 08:58, 8F

09/06 11:16, , 9F
那只是剛好運氣好...記憶體分配的位置是隨OS分配的
09/06 11:16, 9F

09/06 19:57, , 10F
演算法其實是一個很廣氾的講法,跟演算法有沒有關係,當然有.
09/06 19:57, 10F

09/07 01:22, , 11F
推二樓XD
09/07 01:22, 11F

09/07 09:37, , 12F
推推
09/07 09:37, 12F
文章代碼(AID): #1GHvF9s6 (C_and_CPP)
文章代碼(AID): #1GHvF9s6 (C_and_CPP)