推 alimaalimaaa:請問使用malloc有回傳值, 若沒有足夠的記憶體時會回 02/26 11:45
→ alimaalimaaa:傳NULL, 所以說在執行malloc的當下會去檢查是否有足 02/26 11:45
→ alimaalimaaa:夠的記憶體可使用, 但真正給的時候是在"指定"的時候 02/26 11:46
→ alimaalimaaa:這樣是否表示在配置後,指定前,這塊記憶體都不能動? 02/26 11:47
這就牽扯到「virtual memory」的觀念了
malloc 得到的記憶體位置,其實是一個 virtual memory address
它並不是主機板插的那個記憶體的真實位置 (physical memory address)
也就是說,如果呼叫 malloc(500) 回傳了 10000
它並不是真的把實體記憶體上面 10000 至 10499 這塊記憶體給程式用
而你拿到的這個 10000 到底對映到實體記憶體的哪裡,就是作業系統的責任了
強烈建議閱讀「作業系統恐龍書」關於記憶體管理的章節 :)
※ 編輯: james732 來自: 140.117.171.46 (02/26 11:53)
推 alimaalimaaa:感謝james7322大的回答... 02/26 11:52
→ alimaalimaaa:所以說可降低同一時間最大記憶體的使用量(無誤?) 02/26 11:54
推 buganini:就跟sparse file一樣道理啦 02/26 19:49
→ buganini:也不會降低使用量 端看你到底用到多少 02/26 19:50
→ buganini:虛擬記憶體的進一步用法就是paging 02/26 19:52
→ buganini:把比較少用到的實體記憶體內容搬去硬碟 02/26 19:53
→ buganini:下次page fault的時候再搬回來用 02/26 19:53
→ buganini:至於他怎麼判斷該不該產生page fault 在我前面推文說的 02/26 19:54
→ buganini:那個struct裡面會有個紀錄resident/non-resident的東西 02/26 19:54
→ buganini:表示他對應的東西有沒有在實體記憶體裡 02/26 19:55