首頁>Club>
8
回覆列表
  • 1 # 使用者6427591495420

    本質是向 malloc/free 記憶體管理器發出 這塊記憶體我不用了 的提示.

    1. 作業系統管理所有資源, 記憶體屬於一種資源, 所以記憶體由作業系統管理.

    2. 作業系統提供 系統呼叫, 使用者使用 系統呼叫 就可以向作業系統 申請/釋放資源. 對應 linux, 使用者可以用 brk/mmap 等函式申請/釋放記憶體.

    3. malloc/free 是 記憶體管理器, 它幫你和作業系統打交道(幫你調系統呼叫 to be clear =_+), 隱藏其他一切細節, 所以申請大記憶體也是 malloc, 申請小記憶體也是 malloc, 在 linux 下申請記憶體是 malloc, 在 windows 下申請記憶體也叫 malloc. 所以無論陣列還是單個物件, 無論內建型別還是 struct, 申請都叫 malloc, 釋放都叫 free.

    4. 而且他們做得更多, 它們知道把小塊記憶體申請放到一起, 以免造成記憶體碎片, 它們幫你保證執行緒安全, 讓你不必在多執行緒環境下做額外配置, 它們把記憶體快取起來, 以免頻繁的系統呼叫(向作業系統申請/釋放記憶體)拖垮程式, 成為瓶頸.所以 free 的本質是, 你向一個叫做 malloc/free 的記憶體管理器發出提示, 告訴它, 這塊以 xxx 地址起始的記憶體我不用了, 你可以拿去做其他用途. 而決定 "其他用途" 的程式碼, 就叫 釋放, 可能是歸還給作業系統, 可能是標記 未使用 然後快取起來, 請自行去看原始碼 =.=---------------------------------------------樓下說 虛擬地址的, 虛擬地址和 malloc/free 之間隔了一層作業系統呢, 它們管不到物理地址或虛擬地址或頁表的事情的. 你說的 free 和 malloc 做事的實際上是 作業系統在做才對.況且也不是 malloc(準確地說, brk/mmap) 了就會給一塊 physical address 耍.

  • 中秋節和大豐收的關聯?
  • 自動擋汽車在行駛中突然掛入p檔,能掛進去嗎?車輛會有怎樣的反應?