作者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