作者dryman (dryman)
看板EE_DSnP
標題[問題] MemMgr
時間Sat Dec 12 13:54:19 2009
我的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