推 colbylai:posts #252, 273, 295 12/17 04:19
就是老師的 ./memTest 好像有點問題耶,
但是 ./memTest.debug 就沒問題。
兩個都輸入mtr 50
mtn 5 -a 30
可是前者會出現奇怪的狀況:
mtp
=========================================
= Memory Manager =
=========================================
* Block size : 50 Bytes
* Number of blocks : 6
* Free mem in last block: 50
* Recycle list :
[ 3] = 5
=========================================
= class MemTest =
=========================================
Object list ---
Array list ---
ooooo
完全不理解怎麼會變這樣...
可是./memTest.debug打入一樣的東西
才會出現比較合理的結果。
Calling allocArr...(364)
Calling MemMgr::getMem...(364)
Requested memory is greater than block size. Existing...
terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
已經終止
--
另外一個小問題…
在freeArr裡面,有一個todo
// TODO
// 1. Get the array size 'n' stored by system,
// which is also the _recycleList index
// ==> assert(n == getRecycleIdx(n * S + SIZE_T));
可是我覺得這個assert是沒有意義的啊。
因為無論如何一定成立,完全沒有錯的可能性啊.
--
再來一個問題,
老師的./memTest.debug去跑do4
最後會跑出完全看不懂的error...
--
還有想知道 memMgr.h 裡面
最上面在define Macro的時候,
為甚麼每一行的最後面都有 "\"
不是很了解那個的作用...
--
最後還想知道。
在constructor裡面
MemBlock(MemBlock<T>* n, size_t b) : _nextBlock(n) {
_begin = _ptr = new char[b]; _end = _begin + b; }
哪些data member要用 ....() 這種方式來initialize
哪些要在 { } 裡面 initialize
--
感謝老師的回答orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.251.104