Re: [閒聊] 動態配置記憶體給初值與記憶體使用間的 …
作業系統會有個原則:盡量延後「真的把記體配置出去的動作」
譬如說,如果有個程式 malloc 了 1KB 的記憶體,作業系統可能不會馬上給他 1KB
而會在這個程式「真的使用」了這些記憶體,作業系統才會在那一刻分配下去
所以你才會看到,剛完成 malloc 的時候,該程式佔用的記憶體並沒有變多
因為程式還沒有使用到,因此作業系統就延後分配了
但是作了賦值之後,真的把一些數字寫入記憶體,就一定要把記憶體給下去
不過如果程式只用到半個陣列,那作業系統也就給一半的記憶體就好了
所以,這個現象跟「節省記憶體」並沒有什麼關係
如果你想要節省記憶體的話,一開始就不要 malloc 那麼大的空間吧?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
※ 編輯: james732 來自: 140.117.171.46 (02/26 11:45)
推
02/26 11:45, , 1F
02/26 11:45, 1F
→
02/26 11:45, , 2F
02/26 11:45, 2F
→
02/26 11:46, , 3F
02/26 11:46, 3F
→
02/26 11:47, , 4F
02/26 11:47, 4F
這就牽扯到「virtual memory」的觀念了
malloc 得到的記憶體位置,其實是一個 virtual memory address
它並不是主機板插的那個記憶體的真實位置 (physical memory address)
也就是說,如果呼叫 malloc(500) 回傳了 10000
它並不是真的把實體記憶體上面 10000 至 10499 這塊記憶體給程式用
而你拿到的這個 10000 到底對映到實體記憶體的哪裡,就是作業系統的責任了
強烈建議閱讀「作業系統恐龍書」關於記憶體管理的章節 :)
※ 編輯: james732 來自: 140.117.171.46 (02/26 11:53)
推
02/26 11:52, , 5F
02/26 11:52, 5F
→
02/26 11:54, , 6F
02/26 11:54, 6F
推
02/26 19:49, , 7F
02/26 19:49, 7F
→
02/26 19:50, , 8F
02/26 19:50, 8F
→
02/26 19:52, , 9F
02/26 19:52, 9F
→
02/26 19:53, , 10F
02/26 19:53, 10F
→
02/26 19:53, , 11F
02/26 19:53, 11F
→
02/26 19:54, , 12F
02/26 19:54, 12F
→
02/26 19:54, , 13F
02/26 19:54, 13F
→
02/26 19:55, , 14F
02/26 19:55, 14F