p****U 发帖数: 109 | 1 实现malloc咋实现阿。。面试遇到傻傻的站着不知道咋写。 面试官也不太nice 不给提
示, 东欧人也口音非常重, 交流也成问题。
implement:
void * malloc(size_t len);
by calling void *requestPages(int n) //n is number of pages
freePages(void *ptr); // assume each page is
1k. |
n****e 发帖数: 678 | |
f*****d 发帖数: 209 | 3 就是自己做内存管理,你要维护一个未分配内存和已分配的内存的表。
malloc ==> 未分配 -> 已分配
free ==> 已分配 -> 未分配
is
【在 p****U 的大作中提到】 : 实现malloc咋实现阿。。面试遇到傻傻的站着不知道咋写。 面试官也不太nice 不给提 : 示, 东欧人也口音非常重, 交流也成问题。 : implement: : void * malloc(size_t len); : by calling void *requestPages(int n) //n is number of pages : freePages(void *ptr); // assume each page is : 1k.
|
y****1 发帖数: 58 | 4 http://www.ibm.com/developerworks/library/l-memory/
这个实现,没有用链表。只用了3个全局变量。
面试时,写这个行不行啊?
谢谢 大家探讨啊。。。
【在 f*****d 的大作中提到】 : 就是自己做内存管理,你要维护一个未分配内存和已分配的内存的表。 : malloc ==> 未分配 -> 已分配 : free ==> 已分配 -> 未分配 : : is
|
s**x 发帖数: 7506 | 5
我怎么感觉那个 code 有问题,initialize 的时候,memory usable is 0? that does
sound right. not sure what I am missing.
【在 y****1 的大作中提到】 : http://www.ibm.com/developerworks/library/l-memory/ : 这个实现,没有用链表。只用了3个全局变量。 : 面试时,写这个行不行啊? : 谢谢 大家探讨啊。。。
|
s*****r 发帖数: 43070 | 6 核心就是管理一堆从大到小的memory block
这种要用C的工作不要也罢,失了业不好找下家 |
e*******s 发帖数: 1979 | 7 http://stackoverflow.com/questions/5422061/malloc-implementatio
is
【在 p****U 的大作中提到】 : 实现malloc咋实现阿。。面试遇到傻傻的站着不知道咋写。 面试官也不太nice 不给提 : 示, 东欧人也口音非常重, 交流也成问题。 : implement: : void * malloc(size_t len); : by calling void *requestPages(int n) //n is number of pages : freePages(void *ptr); // assume each page is : 1k.
|
q***h 发帖数: 13 | 8 CSAPP 第九章有个简单实现,如果对这块不熟悉的话,个人觉得是一个很好的参考。
另外也可参考 STL 的 allocator 实现。 |
p****U 发帖数: 109 | 9 thanks, 请问 caspp全称? google一下没找到。
【在 q***h 的大作中提到】 : CSAPP 第九章有个简单实现,如果对这块不熟悉的话,个人觉得是一个很好的参考。 : 另外也可参考 STL 的 allocator 实现。
|
q***h 发帖数: 13 | 10 Should be CSAPP, 深入理解计算机系统, sorry for the typo:)
【在 p****U 的大作中提到】 : thanks, 请问 caspp全称? google一下没找到。
|
|
|
h**o 发帖数: 548 | 11 c programming language 2 Edition P164-167.
有代码及详解。
主要是把所有空闲block 用 single link list 穿起来。每个node of list 包括:{
此空闲block的总size,
指向下一个空闲block的指针,
这个空闲block本身(根据此node的指针和此空闲block的总size可以推算出这个block
是那一段)
}
malloc就是把某个空闲block从靠近尾部开始截断。截掉的那段就是想分的长度,分给
malloc的caller, 然后把这个空闲block的总size减去截掉的size.
free 就是把分给malloc的那段在link list找到适当位置重新糊上去。
is
【在 p****U 的大作中提到】 : 实现malloc咋实现阿。。面试遇到傻傻的站着不知道咋写。 面试官也不太nice 不给提 : 示, 东欧人也口音非常重, 交流也成问题。 : implement: : void * malloc(size_t len); : by calling void *requestPages(int n) //n is number of pages : freePages(void *ptr); // assume each page is : 1k.
|
h**o 发帖数: 548 | 12 why did you mention requestPage?
is
【在 p****U 的大作中提到】 : 实现malloc咋实现阿。。面试遇到傻傻的站着不知道咋写。 面试官也不太nice 不给提 : 示, 东欧人也口音非常重, 交流也成问题。 : implement: : void * malloc(size_t len); : by calling void *requestPages(int n) //n is number of pages : freePages(void *ptr); // assume each page is : 1k.
|
g*********e 发帖数: 14401 | 13 requestPage就是当前的free block都不够大了,再request一个新的。
不过如果malloc要求的空间大于1k,就挺难弄的。
这题还可以继续考free block如何管理,从而使得fragmentation尽量减少,以及free
的内存如何粘贴到已有的block里。问这种题的人脑子都不好使,铁了心搞你。 |
d**********x 发帖数: 4083 | 14 i guess the simplest impl should be the one in K&R...
【在 q***h 的大作中提到】 : CSAPP 第九章有个简单实现,如果对这块不熟悉的话,个人觉得是一个很好的参考。 : 另外也可参考 STL 的 allocator 实现。
|
s***e 发帖数: 403 | 15 More Effective C++里面有一个内存池的例子可以参考。 |