作者INsoarDEEP (我/我/我)
看板EE_DSnP
標題[請益] 關於recyclelist的問題.....
時間Fri Nov 20 21:40:25 2009
寫到recycleList嚴重卡關,於是來版上求救... >"<
記得沒錯的話,我們回收的array memory是由 4/8 byte + array大小*obj大小,然後
利用前面的4/8 byte來放下一個回收物的記憶體位置,也就是原本的_first指的位置
概念上可以接受,可是實做遇到好多問題....
假設在pushFront()的case,要加進來的是T* p
記憶體的位置要用什麼樣的資料型態存起來?怎麼抓到p的前4/8byte?
1.抓p的前4byte我想的到的方法只有轉成size_t*,然後把_first指的位置也變成size_t
再assign給*p,這樣就把記憶體位置用size_t數字的形態存起來了....
可是這樣子我之後就不知道要怎麼用這個記憶體位置了,因為就算拿出來也只是個size_t
的number,pointer的宣告好像也沒辦法直接用A* x = 數字(記憶體位置)這種用法,
等於存了一個無效的數字進去...<囧>
2.把p轉成指向A*的pointer,也就是在p指的4/8byte存的內容是一個A*,但是也不知道要
怎麼寫,感覺也很像是invalid,因為要把p指的資料型態從A變成A*,似乎不太可行...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.216.45
1F:→ INsoarDEEP:呃...方法2的強制轉換好像成功了... 11/20 21:54
2F:推 noblebell:用的時候 *((size_t*) _first),不知對原po有無幫助。 11/20 22:35
3F:推 ric2k1: pointer 的宣告為什麼不能是 A* x = 數字? 11/20 23:06
4F:→ ric2k1:應該是不能 A* x = 其他型態變數 吧!? 可以 cast 看看啊! 11/20 23:07
5F:→ INsoarDEEP:A* x = (size_t)p,p是A*,它說從size_t到A*轉換無效... 11/20 23:29
6F:推 ric2k1:但是如果 A* x = (A *)t, where t is a size_t 就可以了 11/20 23:34
7F:推 a3785lexx:我是遶過一個ptr指著要回收位置的開頭來作的@@" 11/21 00:13
8F:→ a3785lexx:pointer的轉換就沒有甚麼問題了 不知原PO的法2是不是 11/21 00:14
9F:→ a3785lexx:就是我說的方法XD? 11/21 00:14