精華區beta EE_DSnP 關於我們 聯絡資訊
※ 引述《timmylin (Noname)》之銘言: : 標題: [問題] Tiger測試程式的class B : 時間: Wed Nov 16 00:00:23 2005 : : : : : 有些Linux(如系上學生工作站)是Fedora Core release 4 (Stentz) : : 此時cout << sizeof(B);會得到1(也就是class大小不必是4 Byte倍數), : : 如此一來,使用老師上課所說配置Recycle List的方法就會失效XD : : 所以會產生B is dead的問題....... : : : (這純粹是我的推測...),因為我把所有B的部分去掉就過了 : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.112.240.36 sizeof(B) 本來就是 1. 在 Fedora Core 3 也是一樣. 請注意在 class MemoryMgr 有這麼一個 #define ... #define S ((sizeof(T) + SIZE_T_1) / SIZE_T * SIZE_T) 這就是要讓 S 變成為 size_t (i.e. 4) 的倍數. 也就是說, 在 MemoryBlock 裡 的每一個 element 都會是 4 的變數. 我想你所遇到的問題出於 B::_k 的值被 recycle list 的 list pointer 所 overwrite 掉了 這應該是 "abc.h" 與 "tigerTest.cpp" 的一個 bug --- Either 不要讓 B 檢查 "B is dead...", 或是讓 B increase size (> 4)... I will fix it and upload it tomorrow... (看來你已經寫好了嗎....?) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.137.236
lunworld:嗚...太晚上來看板 一個下午的青春... 11/16 15:35
lunworld:如果size小於4 RecycleList好像link不起來... 11/16 15:40
ric2k1:已經改好了class B 在用 memory manager 時將不會檢查 _k 11/16 23:58
ric2k1:哎呀 真是抱歉... 11/17 00:01
ric2k1:我只改了 abc.h 11/17 00:02
ric2k1:size小於4應該還是可以用 S 會變成 4 11/17 00:03