EE_DSnP 板


LINE

借用一下... 这个问题最後的结论是要回收长度14的array 也就是回收14*4+1个SIZE_T 我的问题是... 这样的机制是在哪里发生的呢??? 是在老师已经写好的code里吗??还是要自己handle?? 还有,其实我一直都不了解SIZE_T、SIZE_T_1、toSizeT(t)的用处耶 (就感觉上好像就是跟我的问题有关) 请不吝指教 感恩~~~ --------------------------------------------------------------------------- ※ 引述《FATCLOUD (A Cloud)》之铭言: : 标题: [问题] 关於 memblock 最後的回收 : 时间: Thu Apr 30 15:50:09 2009 : : : 老师我有一些疑问 : : : 先说一些一些我的理解: : : 这次作业里 : 要做管理的 class 手上会共用一个 MemMgr : 而 MemMgr 用可以存放各种长度阵列的 _recycleList 保管回收物 : : : 比方说我 new 了长度为 20 的阵列 : 那就会从 _activeBlock 里规划出 : : 20*(物件大小) + (存放阵列长度的记忆体) = 20*S + SIZE_T : : 这麽大的记忆体 : : : 而等到要回收时 : 就把这个记忆体的最前端 (存放长度) 的位址 : push 到 _recycleList[20] 里面去 : : : : : 那麽我的疑问是 : 如果说每一个 _recycleList 都是为了存放某种大小的阵列 : 那麽当 memBlock 被用完把仅剩的一点记忆体回收时 : 那个记忆体大小也必须刚好是某种阵列的大小才行 : 否则就找不到合适的 _recycleList 可以放? : : : ======================================================== : : 举个例子来说 : : : 1.如果今天我想要管理的 class 大小是 16 Bytes = 16*8 bits : 它在 32 bit machine 上要占用四个 SIZE_T 的大小 : : : 2.而我决定使用的 memBlock 大小是一百个 SIZE_T = 100*4 bytes : : : 3.我在上面宣告了十个 object 以後剩下六十个 SIZE_T 的空间 : : : 4.这时我想要宣告一个长度为二十的阵列,需要 20*4 +1 = 81 个 SIZE_T 的空间 : 剩下六十不够用故全数回收 : : 5.我决定回收 60 SIZE_T 的空间, 回收时应该比照占用 60 SIZE_T 的阵列处理 : : : 6.世界上没有占用 60 SIZE_T 的阵列!! : 因为长度 15 的阵列要用 15*4 +1 = 61 个 SIZE_T : : : : 那这样要怎麽办呢? @@ : : : -- :



※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.112.218.75 : 推 ric2k1:依照目前的方法我们会回收长度14的阵列: 14*4+1=57 SIZE_T 04/30 18:01 : → ric2k1:浪费掉 3 个 SIZE_T 的记忆体 04/30 18:01 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 115.43.124.54
1F:推 ric2k1:Compiler 会自己计算好 然後将size传给你 overload的 new[] 05/05 10:00
2F:→ ric2k1:SIZE_T, SIZE_T_1, toSizeT(t) 只是 macros 方便你在写程式 05/05 10:01
3F:→ ric2k1:时取代 sizeof(size_t), (sizeof(size_t) - 1), ... 等等 05/05 10:01
4F:→ yea107:老师其实我最不懂的是toSizeT(t)的用法,哪里会需要呢? 05/05 11:05
5F:→ yea107:老师对不起...可是我问的是在free时,如果还剩60 SIZE_T的 05/05 11:06
6F:→ yea107:空间,那我们应该把它储存在长度14的array中,这件事要自己 05/05 11:07
7F:→ yea107:handle吗??也就是找出最大的n使得n*SIZE_T+1<(remand byte) 05/05 11:09
8F:→ yea107:是要我们自己做,还是这就是toSizeT(t)的用处呢?? 05/05 11:10
9F:→ yea107:好像打错字了...remain... 05/05 11:23
10F:推 ric2k1:60 Bytes 吧? 是的, 你自己要判断这剩下的 60B 可以回收的 05/05 11:25
11F:→ ric2k1:的 array 最大是多少? 这时 toSizeT(t) 也许就有用处, 05/05 11:26
12F:→ ric2k1:它可以将 t promote 到最接近的 SIZE_T 的倍数. 不过偷偷说 05/05 11:26
13F:→ ric2k1:其实我後来的 code 有多加了一个 macro, "downToSizeT(t)" 05/05 11:27
14F:→ ric2k1:意思你们可以自己猜, 你们要自己加也可以. 05/05 11:28
15F:→ yea107:谢谢老师回答 05/05 12:56
16F:→ muxiv: 60 Bytes 吧? https://muxiv.com 07/12 00:15







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP