作者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
1F:→ dryman:我在MemMgr那边有加一个cout看它有没有被construct 12/12 15:07
2F:→ dryman:发现alloc会比constructor先被呼叫 12/12 15:08
3F:推 ric2k1:希望你已经解决了! 不过还是看不出来为何你的 alloc 会比 12/12 20:17
4F:→ ric2k1:constructor 先被呼叫, 可以知道是谁呼叫的吗? 12/12 20:18
5F:→ ric2k1:比方说加个 static int _id 来看看... 12/12 20:19
6F:→ ric2k1:in class MemMgr 12/12 20:19
7F:→ dryman:还没有解决,改天再来测(下礼拜又有期中考了..) 12/12 23:55
8F:推 herbert570:请问 compile 有过吗? 12/13 00:02
9F:→ dryman:有过啊 12/13 00:20