條目十一《理解自定義分配子的合理用法》

2022-02-04 03:22:16 字數 708 閱讀 4621

根據大牛們的測試:

stl預設的記憶體管理器(allocator)太慢,或者浪費記憶體,或者在使用的時候會產生記憶體碎片。

又或者需求不一樣時:

1.allocator是多執行緒安全的,而你執行環境是單執行緒,所以想減少執行緒同步帶來的te不必要開銷。

2.當想把容器的物件放到乙個特殊堆的相鄰位置,做到引用區域性優化。

3.建立乙個共享記憶體相對應的特殊堆,在這塊記憶體存放乙個或多個容器,以便其他程序庫共享這些容器

由於以上的stl預設的分配子allocator為了兼顧絕大多數應用場景,造成的效能中庸,我們可以根據實際的需求而自定義容器的分配子(allocator)。

templateclass myallocator 

void deallocate(pointer ptrtomemory, size_type numobjects)

};typedef datetype int;

typedef vector> myvector;

myvector vec;

通過對allocate和deallocate兩個成員函式的重寫,就可以達到自定義分配子的目的。

例子:對於條目十和條目十一,其實掌握的還是一般,後面閱讀《stl原始碼剖析》再深入學習吧。

《effective stl》

自定義QTreeView中的條目編輯器

預設情況下qtreeview中的條目在使用者雙擊情況下會產生編輯器,允許使用者輸入,但是自己用了這麼久,每個功能都是不需要的,往往都是右鍵啊,其它功能鍵啊,啟用編輯器。而同時,在專案中,這種原生的編輯器往往都不能滿足需求,因為在某些機器測試情況下,會出現怪怪的樣子,不是編輯器的高度過窄,就是不能限制...

自定義事件的理解

cc.eventmanager.dispatchcustomevent throw this 丟擲乙個自定義事件,throw用於接收方辨別接收的是哪個事件this.listener cc.eventmanager.addcustomlistener throw this.chek.bind this...

條款11 理解自定義分配器的正確用法

你用了基準測試,效能剖析,而且實驗了你的方法得到預設的stl記憶體管理器 即allocator 在你的stl需求中太慢 浪費記憶體或造成過度的碎片的結論,並且你肯定你自己能做得比它好。或者你發現allocator對執行緒安全採取了措拖,但是你只對單執行緒的程式感興趣,你不想花費你不需要的同步開銷。或...