boost主要是通過六種智慧型指標來管理記憶體的:scoped_ptr scoped_array shared_ptr shared_array weak_ptr intrusive_ptr。他們都是輕量級的物件,速度與原始指標相差無幾,對於所指的型別t也僅有乙個很小且很合理的要求:型別t的析構函式不能丟擲異常。
scoped_ptr:僅僅提供了*和->操作,且賦值操作符和拷貝建構函式被定義為私有的,有效的防止了指標所有權的轉讓。 ==和!=操作符被私有化,拒絕比較操作。
scoped_array:包裝了new操作符在堆上分配的動態陣列,彌補了標準庫中沒有指向陣列的智慧型指標的缺憾。在需要動態陣列的情況下我們因該使用std::vector,它比scoped_array提供了更多的靈活性。除非對效能有非常苛刻的要求,或者編譯器不支援標準庫,否則不推薦使用scoped_array。
shared_array:結合了scoped_array和shared_ptr的功能。
weak_ptr:沒有過載operator*和->,最大的作用在於協作shared_ptr工作。可以從shared_ptr或則另乙個weak_ptr構造獲得資源的觀測權,它的構造和析構不會引起引用計數的改變,它只是乙個默默的觀察者。
intrusive_ptr:對記憶體占用要求的非常嚴格,必須與原是指標一樣;先存**已經有了引用計數機制管理的物件。
記憶體池管理物件:pool object_pool
pool:只能作為普通資料型別如double int等的記憶體池 因為它只是分配記憶體不呼叫建構函式。
object_pool:既可以作為普通資料型別的記憶體池,又可以作為類物件的記憶體池。
singleton_pool:提供執行緒安全
pool_allocator:記憶體配置器
記憶體管理機制
記憶體管理 jvm將記憶體分成三大主要區域 堆,棧,方法區,用來儲存資料。堆 堆中主要儲存引用型別物件,給成員變數分配空間。棧 jvm在執行程式時,在棧中會為每乙個方法都提供儲存空間叫棧幀,用來儲存方法中的區域性變數。方法區 用來儲存jvm載入的位元組碼檔案的資訊 類的資訊 包含類的方法,方法只有乙...
記憶體管理機制
記憶體管理是乙個作業系統必不可少 並且 非常重要的一環 linux 的成功 和它優秀的記憶體管理聯絡非常密切 因為乙個系統的高效性慾穩定性往往決定於它的記憶體管理機制 我項很多人吃過 dos 下 640k 的苦吧 前面我們介紹了 386 保護模式 從今天起我們將在此基礎上 分析 linux 的虛擬儲...
iOS 記憶體管理機制
學習要點 1.reference counting 引用計數機制 2.了解mrc apc和gc 3.autoreleasepool 執行機制 4.如何避免 retain cycle reference counting 引用計數機制 cocoa 上基本的記憶體管理機制就是引用計數,通過乙個 refe...