malloc project(一)
来源:互联网 发布:2017ssh项目源码 编辑:程序博客网 时间:2024/06/06 04:37
这次我上的一门关于computer system的课的project是写malloc这个C的built-in function。实际上这是一个被研究了很久问题,如何有效快速的分配内存。其实我们也不是说把这个project整个重新写一遍,我们是根据教授提供的malloc的代码改进。这次project评分就是根据这个改进的malloc的performance。既有空间使用量的评测,也有时间的评测。
昨天跟我的partner把alignment从16bytes改成8bytes,performance提高了2分,我们着实激动。alignment的意思其实就是free memory中各个block的基本单位。在32bit的machine上,16bytes的alignment的确有些浪费是因为很少有需要allocated的memory可以接近16bytes,甚至8个bytes都不到,16bytes的alignment就会有很多wasted space。导致接下来的operation效率降低。
这个memory allocator由4个主要的function组成,mm_init, mm_malloc, mm_free, mm_realloc。这些function都定义在一个叫mm.c的source file里。也就是说这个assignment已经给了我们一个基于implicit free list, first fit placement,boundary tag coalescing的memory allocator。 关于什么是implicit free list, first fit placement,boundary tag coalescing,这个会在整个project讨论完后加以阐述。这个function就是我们可以modify的。
mm_init是首先要被call,来initialize比如说initial heap area. 这个mm_init还一定要可以reinitialize这个allocator。这个mm_malloc是来分配memory空间的。这个mm_malloc会return一个pointer到一个分配好的memory block。大小是size。这个memory space一定要在heap里面而且不能与其他memory block重叠。这个还是比较intuitive的。这个mm_free还是比较好理解的,就是去free一个已经分配好的block,由这个ptr指着。这个ptr一定要是这个mm_mallocreturn的。这样才能保证那个block还没有被free。最后一个function就是mm_realloc。这个跟mm_malloc有点像,但是会有一些限制。这里面有点tricky的一点,就是这个分配的new block不一定是原来的那个block。这个跟新分配的空间有关。这个malloc很tricky是因为这里面有很多的untyped pointer,所以我们要写一个heap checker来看一下一致性。这个heap checker 在 debug的时候很有用。在这个mm.c 里面有一个function叫checkheap。
我们可以来稍微看一下这个lib。有5个function在lib里面是挺重要的。首先第一个就是mem_sbrk。这个function就是从free memory里面拉一部分memory放到haep里面,然后把pointer指到这一段memory的开头。这个mem_heap_lo会找到指向这个heap开头的pointer。这样对于需要搜寻整个heap的function,pointer就很容易移动。mem_heap_hi会找到整个heap最后一个pointer。mem_heapsize会找到整个heap的size。mem_pagesize会把这个系统page size告诉你。
- malloc project(一)
- *** glibc detected *** malloc(): memory corruption(一)
- 一,malloc free 函数
- project server 2003最佳实践(一)
- 用maven部署java project(一)
- (一)如何建立 Android Application Project
- malloc()
- glibc2.5 中的malloc 与 free 之我见(一)
- C++回忆录:(一)new和malloc的区别
- 内存分配学习(一)-- 实现一个malloc
- malloc 实现过程分析一
- C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存
- 每日一题(20)——malloc与free(一)
- Unity3d 学习界面 之 工程浏览器 (Project Browser)(一)
- [Unity3D插件系列]-A* Pathfinding Project 学习(一)
- [Unity3D插件系列]-A* Pathfinding Project 学习(一)
- Microsoft Office Project 2016使用心得(一)
- AS报错(一):Gradle project sync failed
- ISO Latin-1字符集
- php 调用webservice ,返回数据 中文乱码问题
- XAML语法术语基础教程(2)
- XAML语法术语基础教程(3)
- IE8“开发人员工具”使用详解(附相关下载)
- malloc project(一)
- 新一代主流开发板UT-S3C6410开发板 低功耗 高性能
- 失误
- ISO Latin-1字符集
- OGRE1.7.1+cmake2.8.1+cegui0.7.2配置步骤
- ASP.NET正则表达式应用小结
- MySQLConnection创建后必须关闭,否则W3WP.EXE一直占用MYSQL连接
- Maven常用命令
- Mysql 连接提示 Client does not support authentication protocol requested by server; consider upgrading MySQL client 解决方法