作者vincere (vin)
看板EE_DSnP
标题[问题] size_t 之倍数
时间Fri Nov 18 14:12:07 2011
因为想了一个晚上
虽然有听老师讲过、爬过文
但感觉还是没有完全地了解
不太敢随便下手
所以想要请教大家一下
我知道要取sizeof(size_t)之倍数记忆体的原因
是为了做到platform dependent
因为系统在new的时後
会对齐size_t为倍数的位置
但在作业中
我们先自己跟系统要一块memory
来後再根据new多少再来分配记忆体
但这里我不是很清楚的是
为何对自己要到的记忆体
不能依照真正object大小来要
而是也要跟系统一样要sizeof(size_t)为倍数的记忆体大小呢?
举例说:
一开始可能将0x00000000~0x00000007位置的记忆体分配出去
然後下次再从0x00000008开始开始
原因是因为
就算是我们自己已经要来的MemBlock,
也无法aceess/或是指到非sizeof(size_t)倍数的记忆体?
还是说只是单纯要模仿机器每次都切齐sizeof(size_t)倍数的记忆体位置呢?
或是另有其它隐情?
不好意思小的观念不清
恳请解惑
感激不尽
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.25.106
※ 编辑: vincere 来自: 140.112.25.106 (11/18 14:13)
1F:推 simpdanny:因为new[n]的时候 系统会要求对齐後bytes*n+SIZE_T 11/18 15:37
2F:→ simpdanny:所以中间一定会有一些零碎bytes是系统会空掉的 11/18 15:38
3F:→ vincere:所以意思是说 假如我在new的过程中 想要拿memory block中 11/18 16:18
4F:→ vincere:*(_ptr+5)所相对的记忆体时没办法的?而是它会要求对应的 11/18 16:20
5F:→ vincere:*(ptr+8)开始的位置?如果我强制assign给它程式是否会 11/18 16:22
6F:→ vincere:crash掉?如果想错恳请纠正 11/18 16:22
7F:推 simpdanny:应该是没办法 因为new operator会自动用他的! 11/18 17:19
8F:→ vincere:感激:) 似乎比较了解了 11/18 17:32