BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #13517同步于 2008/10/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于malloc

wwwking
2008/10/5镜像同步8 回复
关于malloc有几个问题想问问大牛:每次malloc的最小单位是页吗?过多malloc和free会不会造成过多的碎片?而且malloc算是一个系统调用,需要在内核态下运行吗?
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
ericyosho机器人#1 · 2008/10/5
malloc的最小单位是字节。 是否会产生过多的碎片,由操作系统的内存管理机制决定。 malloc不能算是系统调用吧,只是库函数,sbrk才是系统调用。 频繁地进行malloc和free会严重地影响程序的执行效率,所以一般的做法是,malloc一块较大的内存,然后由代码自行管理。
wwwking机器人#2 · 2008/10/5
为什么说频繁的调用会严重影响程序效率呢? 【 在 ericyosho 的大作中提到: 】 : malloc的最小单位是字节。 : 是否会产生过多的碎片,由操作系统的内存管理机制决定。 : malloc不能算是系统调用吧,只是库函数,sbrk才是系统调用。 : ...................
SDI机器人#3 · 2008/10/5
操作系统课上应该讲过原理了呀,malloc实际上自己也要维护一个可用内存的表,你看到的是要多少字节就给多少字节(不出错的情况下),实际上他自己也是从OS批发来的大坨内存分给你的,你分的过于频繁了,会导致碎片的出现,即总量够大,但是可分配的单块空间不够大的情况,而且调函数是有开销的。 【 在 wwwking (Donie) 的大作中提到: 】 : 为什么说频繁的调用会严重影响程序效率呢?
wks机器人#4 · 2008/10/5
还是静态分配王道。 全局变量王道。 stl vector王道
wwwking机器人#5 · 2008/10/5
恩,清楚了,谢啦 【 在 SDI 的大作中提到: 】 : 操作系统课上应该讲过原理了呀,malloc实际上自己也要维护一个可用内存的表,你看到的是要多少字节就给多少字节(不出错的情况下),实际上他自己也是从OS批发来的大坨内存分给你的,你分的过于频繁了,会导致碎片的出现,即总量够大,但是可分配的单块空间不够大的情况,而且调函数是有开销的。
flyingkisser机器人#6 · 2008/10/6
静态分配或全局变量过多会造成编译完的程序体积变大,也要注意一个“量”吧。 【 在 wks (cloverprince) 的大作中提到: 】 : 还是静态分配王道。 : 全局变量王道。 : stl vector王道 : ...................
flyingkisser机器人#7 · 2008/10/6
windows的话,malloc走是的堆,过多的malloc和free会不会造成碎片, 其实从堆上分配的内存,在free时会根据一定的条件,自行进行碎片的合并。 至于这种合并的效果怎么样,我不搞算法研究,不敢乱说,只能说内部机制上 会自动进行碎片合并,每次free时都会进行。 malloc一般情况下不涉及到系统调用。 最小单位,不限,但会给你8字节还是16字节对齐。 【 在 wwwking (Donie) 的大作中提到: 】 : 关于malloc有几个问题想问问大牛:每次malloc的最小单位是页吗?过多malloc和free会不会造成过多的碎片?而且malloc算是一个系统调用,需要在内核态下运行吗?
jerrytian机器人#8 · 2008/10/9
【 在 wks 的大作中提到: 】 : 还是静态分配王道。 : 全局变量王道。 : stl vector王道 后两个symbian一个都不能用.