memory management
来源:互联网 发布:龙虎看盘软件下载 编辑:程序博客网 时间:2024/06/09 21:38
系统的malloc() 以及free() 其实速度不快 毕竟关系到kernel mode的切换 以及系统内存管理
在某些极端情况下,可以自己做内存管理(例如写个myMalloc() 以及myFree() 取代原本系统)
一次跟系统要一大块memory 自己管理
*在手机上运行JVM
*search engine 内核
*大数据运算
实际测试中 自己做的myMalloc() /myFree() 可能比原系统malloc()/free()快20倍~400倍
*看使用的方法 系统 cimpiler 硬件
---------------------------------------------------------------------------------------------------------------------------------------
1.建立tree/hash table
*小块内存 大量次数
*也许每次只要几十个bytes 但是也许是千万次
2.需要大块内存
*读入一段数据/一file
*也许一次需要Mb 但是次数不懂
至于提升速度的情况是1
至于情况2 直接调用系统原本的malloc/free() 就好啦
-----------------------------------------------------------------------------------------------------------------------------------
方法一myMalloc
一次要一块大内存(10Mb)
有一个available的linked-list
*记录目前没有被使用的内存区块
有一个used的linked-list
*记录目前正在被使用的内存区块
加一个pool,里面放空的node(s)
myMalloc(size_t t)的时候
*available里面找出>=t的node
*修改available挖出一块t
*新增一个node放到used,返回这个地址
*如果找不到,直接调用malloc
---------------------------
myFree(void *addr)
如果addr不再N~N+10Mb
*使用系统的free()
在used里面找addr
*找不到的话就算了
找到的话,将node移出used 加入available
比较available前后,是否要做合并的动作
-----------------------------
合并动作merge
1.必须放在avaible第一个
*检查是否与后面那个相连(是)
->与后面合并->node放回pool
*不相连 node放在available第一个 重设available
2.与前后皆相连
*与前面的合并(前+node+后)
*把node+后 放回pool
3.与后面相连
*与后面合并,然后node放回pool
4.与前面相连
*与前面合并,然后node放回pool
5.都不是,node插入正确的位置
-----------------------------------------------------------------------------------------------------------
方法一优点
1.内存空间充分运用
2.很适合小块内存但是大量次数
3.10Mb不够的时候,可以考虑加一块10Mb
缺点
1.每次myAlloc/m yFree都要修改至少两个list available used两个list
2.写起来复杂
3.速度不快
--------------------------------------------------------------------------------------------------------------
- Memory Management
- Memory Management
- Memory management
- Memory Management
- Memory management
- Memory Management
- Memory management
- Memory Management
- Memory Management
- memory management
- 8.4 Automatic memory management
- 10.9 Automatic memory management
- c memory management(zz)
- Virtual memory management
- Xen Memory Management
- Inside memory management
- Symbian C++ Memory Management
- Memory Management Functions
- C++ 多线程 WaitForMultipleObejects函数
- javaSE:面向对象知识点
- 报刊社正式成立
- Delphi(Object Pascal)中通过COM口交互数据
- Razor 三目运算符写法
- memory management
- 创建Servlet 的三种方式
- html5验证
- 微软2017年预科生计划在线编程笔试第二场-#1498 : Diligent Robots
- CentOS 7 输入法
- Android adb 开发常用命令
- leetcode-3 Longest Substring Without Repeating Characters
- React框架中组件的生命周期及其涉及到的方法
- 获取Keras模型中间层输出