C/C++記憶體管理器

來源:互聯網
上載者:User

標籤:編譯   使用者   聲明   怎麼   thread   代碼   tor   自己   標準庫   

C標準庫提供了malloc,free,calloc,realloc,C++標準庫還提供了new, new[], delete, delete[]。這些用來管理記憶體,看起來夠用了,為啥還要自己寫一個記憶體管理器呢?

原因還是從效能考慮:例如malloc和new是出於通用性考慮的,能處理多線程情況(multithread)。對於單線程的程式,這種額外的功能反而降低效能。
而且還注意到,new/delete/free/malloc都是要在user-space和kernel-code做切換的,context的切換會降低效能。如果自己寫一個user-land的記憶體管理器,就能大幅減少這種切換。還有就是GC(garbage collection)。

幾點要求
  1. 速度:比編譯器的記憶體 Clerk要快才行
  2. 魯棒:不能有記憶體流失,分配多少就收回多少
  3. 方便:使用者不怎麼需要改代碼,就能把記憶體管理器加進去
  4. 移植:應當跨平台,使用者在啥系統上都能用,方便移植
前人經驗
  1. 申請大塊記憶體
    一次性申請一大塊記憶體,減少向系統申請的次數,以後需要申請記憶體就從這一大塊上分配。
    (這不就是緩衝麼。。)
  2. 為特定尺寸最佳化
    任何程式中都一種最常見的記憶體申請尺寸。為這種尺寸最佳化,提升效能。
  3. 需要刪除的記憶體暫時存放在容器中(敝帚自珍)
    從使用者角度看,變數聲明周期結束,要釋放分配的記憶體;但是記憶體管理器實際上可以“不真的把這塊記憶體還給系統”,而是攢起來留給後續需要分配記憶體時用。當然,這種記憶體更多的是片段,所以再分配時可能不夠用,那就得再找大塊記憶體去分配了。

以上內容來自IBM的一篇教程,還有很多內容沒能看完和理解,挖坑帶填:https://www.ibm.com/developerworks/aix/tutorials/au-memorymanager/index.html

C/C++記憶體管理器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.