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