hur.cn - 华软网

 热门搜索

内存管理的效率讨论,望大侠们指点一下!

  作者:未知    来源:网络    更新时间:2011/4/15
有结构A,其大小为50字节,在多个地方需要用到这个结构,还会动态的删除这个结构,但是这个结构不能和其它结构统一申请内存,只能单独申请内存,大家会怎么做?
1、每用到一个就申请一个?
2、每次申请多个?即申请一块够容纳多个A实例的大内存,不够时再申请一个大内存,这些大内存构成链表进行管理!空闲时再放入空闲链表,待需要时继续使用,设一个阈值Y,空闲实例数量超过Y就内存整理,


之所以问这个问题,是因为好像操作系统对于内存申请有个最小值(貌似为512字节或其偶数倍?),即使你申请的内存大小远远小于这个最小值,它也会给你这个最小值大小的内存,如果要申请的小内存数量太多,对内存的浪费也是很大的!

望大虾们来指点一下!
---华软 网友回答---
2
---华软网友回复---
晕,出现两个相同的帖?
大概是因为我发帖后进入非自动跳转网页时刷新了页面!
版主可以把另一个删了!
---华软网友回复---
采用内存池方案,一次申请一大块
---华软网友回复---
关于操作系统内存分配确实是会多分配,具体多少我不知道,它是一次分配挺大的一块,相当大,你申请的时候都是从这块里分配的,删除的时候也不会立即就删除内存块。应该是有个策略的。
---华软网友回复---
还是用内存池的方法比较好点
---华软网友回复---
方便就用1方案了,操作系统有自己的堆管理机制,不怕会浪费内存,内部也是先分配一大块内存然后按需分给你小块.如果要效率又不怕麻烦就用2了.
---华软网友回复---
  class="deleted_message"> 该回复于2011-04-15 15:41:32被版主删除
---华软网友回复---
引用 5 楼 tandyt 的回复:
还是用内存池的方法比较好点

也就是第二钟方法?还是仅只申请一块?
---华软网友回复---
引用 6 楼 lostying 的回复:
方便就用1方案了,操作系统有自己的堆管理机制,不怕会浪费内存,内部也是先分配一大块内存然后按需分给你小块.如果要效率又不怕麻烦就用2了.

如果这个结构是树控件的node,这样申请就麻烦了!
---华软网友回复---
引用 9 楼 zgklem 的回复:
引用 6 楼 lostying 的回复:
方便就用1方案了,操作系统有自己的堆管理机制,不怕会浪费内存,内部也是先分配一大块内存然后按需分给你小块.如果要效率又不怕麻烦就用2了.

如果这个结构是树控件的node,这样申请就麻烦了!

恩,看具体需求了,最后还是为了方便自己嘛.如果方法2带来的效率不很明显的话就可以方法1了.
---华软网友回复---
pool
---华软网友回复---
你看看glib的malloc就知道了,这些事库都做得蛮好      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。