作者a3785lexx (Alex)
看板EE_DSnP
标题[请益] 两个getMem里的sizeof(size_t)...@@
时间Sat Nov 14 19:10:42 2009
如题...这个问题困扰我有点久了
在MemBlocks::getMem中还有在MemMgr::getMem中
TODO都有要求要make sure that t % SIZE_T == 0
但是我左思右想不得其解...
为甚麽t一定要是SIZE_T的倍数不可呢??
更精准的来说
我不懂的是
1.系统在new的时候所传的参数size_t t是根据data member来决定的
正常情况下它有可能会不是SIZE_T的倍数吗?
虽然我觉得应该是有可能,上课投影片的例子newOp.cpp就是一个的感觉@@
单一一个A的物件是12这麽大,可是size_t有8这麽大...orz
那麽,为甚麽在实作malloc的时候一定要t % SIZE_T == 0呢??
如果t不是SIZE_T的倍数会出甚麽问题吗??
呃...等一下...我一边打这篇请益文一边想...难道说...
要求t一定要是SIZE_T的倍数是为了要能够达到平台的相容性吗??
虽然我还是不懂...以本次作业为例,obeject的data member都是char
char据说是可以一个Byte一个Byte的去吃记忆体的样子?
如果不是以SIZE_T为单位去拿记忆体
丢给memTestObj用,就一定会出包,不管char的面子有多大吗??
又,如果真的是系统所认定的物件大小size_t t
不会是实作记忆体的时候不会出包的大小SIZE_T的倍数
那麽我们多丢给这个物件的记忆体,系统会了解吗??
就是它会知道这里面有多给的不能用的部分吗?
感觉起来有点毛毛的也......o.O
2.如果在new的时候系统丢的size_t t其实一定会是SIZE_T的倍数
(我记得上课的时候好像是这麽回事啊囧?
上课的时候去算一个物件的大小最後都会取tosizeT说orz)
也就是如果我刚刚脑包了,1.的问题根本不存在的话....囧
那麽,TODO里的make sure....只是要我们assert它吗XD?
顺带一提,free的过程只是把记忆体丢给recycleList纪录而已
其实原本的object pointer还是可以去存取这个位置
这样好恐怖的感觉@@"
尤其我试了一下...就算是内建的形态也是有这种情况
所以在外面写的人只要一恍神还是会出很严重的问题...orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.43.108.164
※ 编辑: a3785lexx 来自: 114.37.106.93 (11/14 23:40)
1F:→ a3785lexx:难道建立统一的size_t标准只是为了可以完全用完每一个 11/15 00:20
2F:→ a3785lexx:memBlock而已吗....刚刚突然想到的XDrz 11/15 00:20