[問題] 指標回傳值

看板C_and_CPP (C/C++)作者 (Laleh)時間12年前 (2013/11/20 14:12), 編輯推噓2(2032)
留言34則, 6人參與, 最新討論串1/1
想請問指標回傳的記憶體位置 是虛擬記憶體的位置還是 實體記憶體的位置呢 該如何用程式碼測試呢? 謝謝 -- Sent from my Android -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 27.245.166.51

11/20 14:19, , 1F
什麼平台?用途?
11/20 14:19, 1F

11/20 14:55, , 2F
ws or linux 只是好奇印出的位置是實體還虛擬 @@
11/20 14:55, 2F

11/20 16:18, , 3F
虛擬
11/20 16:18, 3F

11/20 19:26, , 4F
我的認知:在一般作業系統上的記憶體的位置都是虛擬的
11/20 19:26, 4F

11/20 19:30, , 5F
在作業系統程式印出來的應該叫邏輯位置
11/20 19:30, 5F

11/20 19:31, , 6F
OS根據本身設計再去搬資料給你
11/20 19:31, 6F

11/20 19:37, , 7F
如果你所指的實體是 只要資料是在RAM上 這樣的狀況的話
11/20 19:37, 7F

11/20 19:38, , 8F
那程式印出來的應該都是實體的,正在執行的process 它所需
11/20 19:38, 8F

11/20 19:40, , 9F
行程內部的資料通通都會被搬到RAM上,非執行中的才有可能
11/20 19:40, 9F

11/20 19:40, , 10F
swap
11/20 19:40, 10F

11/20 20:12, , 11F
不一定,執行中的程式其部份page也可能被swap out
11/20 20:12, 11F

11/20 20:13, , 12F
或是用malloc配置出來的記憶體也可能沒對應到實體位址
11/20 20:13, 12F

11/20 20:14, , 13F
直到寫入時發生page fault才會真正配置實體記憶體
11/20 20:14, 13F

11/20 20:16, , 14F
單一的process如果沒有被pause,應該不會發生這種狀況
11/20 20:16, 14F

11/20 20:16, , 15F
樓上可不可以提供一下你說的機制的名稱 我想研究一下
11/20 20:16, 15F

11/20 20:25, , 16F
我想調整一下我的說法好 也許有一點誤會在這
11/20 20:25, 16F

11/20 20:29, , 17F
樓上的說法是對的 只是何時會搬資料到RAM上時間點的問題
11/20 20:29, 17F

11/20 20:32, , 18F
程式需要某個位置上的資料時 資料已經存在RAM上->直接存取
11/20 20:32, 18F

11/20 20:35, , 19F
資料在table上不在RAM上->page fault中斷->行程pause->
11/20 20:35, 19F

11/20 20:37, , 20F
OS跑中斷服務(搬資料到空的ram)->再回存行程解除pause
11/20 20:37, 20F

11/20 20:41, , 21F
這樣描述應該沒錯 只是對於原po去"印"這件事
11/20 20:41, 21F

11/20 20:43, , 22F
印一個指標所指向的位置 只是去讀取記億體上存放指標變數
11/20 20:43, 22F

11/20 20:47, , 23F
的變數資料 跟指標指的那段空間的 要看table才會知道在
11/20 20:47, 23F

11/20 20:48, , 24F
11/20 20:48, 24F

11/20 20:48, , 25F
^^的狀態
11/20 20:48, 25F

11/20 23:25, , 26F
to @sardine: "lazy loading" kernel 可以只建memory mapping
11/20 23:25, 26F

11/20 23:26, , 27F
就開始執行, 等到 eip 指到某一頁, 或用到全域變數才讀硬碟
11/20 23:26, 27F

11/20 23:27, , 28F
2. 程式正常執行, stack pointer 就慢慢往下長, 空間用完了會
11/20 23:27, 28F

11/20 23:28, , 29F
page fault, kernel 才多 map 一頁給 stack
11/20 23:28, 29F

11/20 23:29, , 30F
3. http://dedis.cs.yale.edu/2010/det/ OSDI'10 的 paper 裡
11/20 23:29, 30F

11/20 23:30, , 31F
本人實作 lazy migration, 把 process 移到別台機器, 只移
11/20 23:30, 31F

11/20 23:31, , 32F
page table 和 register 就開始跑, 需要才透過網路移資料
11/20 23:31, 32F

11/20 23:35, , 33F
所以說指標回傳值是邏輯位置囉? (非真正在RAM的位置)
11/20 23:35, 33F

11/23 01:07, , 34F
要推程式設計師的自我修養了嗎? 還有恐龍本
11/23 01:07, 34F
文章代碼(AID): #1IZ5An_R (C_and_CPP)
文章代碼(AID): #1IZ5An_R (C_and_CPP)