问几个内存池使用的有关问题
问几个内存池使用的问题
刚看完普通内存池的实现,有几个问题:
1.内存池是不是一般在 频繁分配和收回大小不定的内存的时候使用? 因为如果分配的内存大小固定,就算是频繁分配,也不会产生内存碎片?
2.在频繁分配和收回内存的情况下,内存池是否会提高程序的效率? 因为内存收回只是重新入池,并没有真正还给操作系统,这样内存池来管理分配和收回就比操作系统直接来管理效率更高?
3.在代码中一般是不是定义一个全局的内存池对象?然后整个程序都能使用它?
------解决方案--------------------
1 是的,分配固定后,再分配给程序用是已经分配好的内存,没有经过操作系统的!
这样做避免了内存碎片,使得内存分配效率得到提升
2 显然效率要高些,频繁的系统调用本身也是很大的开销的,
这样相当于一次再超市买好了一个月的东西,不需要频繁的去超市,提高效率
3 一般在你程序起来了,main函数里分配好内存池的,然后通过地址和长度来取内存空间!
------解决方案--------------------
自己管理可以避免glibc中产生内存碎片,碎片对于glibc来说是要各种处理的,比较耗费CPU,我们在应用层管理,就可以减轻glibc的负担。
刚看完普通内存池的实现,有几个问题:
1.内存池是不是一般在 频繁分配和收回大小不定的内存的时候使用? 因为如果分配的内存大小固定,就算是频繁分配,也不会产生内存碎片?
2.在频繁分配和收回内存的情况下,内存池是否会提高程序的效率? 因为内存收回只是重新入池,并没有真正还给操作系统,这样内存池来管理分配和收回就比操作系统直接来管理效率更高?
3.在代码中一般是不是定义一个全局的内存池对象?然后整个程序都能使用它?
------解决方案--------------------
1 是的,分配固定后,再分配给程序用是已经分配好的内存,没有经过操作系统的!
这样做避免了内存碎片,使得内存分配效率得到提升
2 显然效率要高些,频繁的系统调用本身也是很大的开销的,
这样相当于一次再超市买好了一个月的东西,不需要频繁的去超市,提高效率
3 一般在你程序起来了,main函数里分配好内存池的,然后通过地址和长度来取内存空间!
------解决方案--------------------
自己管理可以避免glibc中产生内存碎片,碎片对于glibc来说是要各种处理的,比较耗费CPU,我们在应用层管理,就可以减轻glibc的负担。