看板 EE_DSnP 關於我們 聯絡資訊
我的iterator是用array來存trace(trace的class叫做HisNode) 這個Array是dynamic array,先要一大塊空間,超過再長大 不過有個問題,就是每次new一個iterator就會new[]HisNode 如果HisNode沒被回收的話就會有一堆空間被浪費掉 所以我寫了一個Memory manager template<class S> MemMgr<S> template<class T> HisNode { void* operator new[](size_t t) {return (void*)(memMgr->alloc(t));} static MemMgr< HisNode<T> >* _memMgr; }; template<class S> MemMgr { public: MemMgr(){_recycleList = new MemRecycleList<S>[32];} S* alloc(size_t t){ 先看_recycleList有沒有多的memeory再alloc S } private: MemRecycleList<S>* _recycleList; }; template<class T> MemMgr< HisNode<T> >* HisNode::_memMgr = new MemMgr< HisNode<T> >; 結果這樣寫居然就出問題了... 在constuct MemMgr之前 它會先new?一個HisNode.. 也就是說S* alloc()會比MemMgr的constructor更早被呼叫 所以_recycleList的資料是垃圾 程式就crash了.. 請問各位高手,這種問題該怎麼解決啊,試了兩個小時了都還解決不了 一直佔空間的HisNode讓我效能好差Q口Q -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.4.235
dryman:我在MemMgr那邊有加一個cout看它有沒有被construct 12/12 15:07
dryman:發現alloc會比constructor先被呼叫 12/12 15:08
ric2k1:希望你已經解決了! 不過還是看不出來為何你的 alloc 會比 12/12 20:17
ric2k1:constructor 先被呼叫, 可以知道是誰呼叫的嗎? 12/12 20:18
ric2k1:比方說加個 static int _id 來看看... 12/12 20:19
ric2k1:in class MemMgr 12/12 20:19
dryman:還沒有解決,改天再來測(下禮拜又有期中考了..) 12/12 23:55
herbert570:請問 compile 有過嗎? 12/13 00:02
dryman:有過啊 12/13 00:20