avatar
问一道题 实现malloc# JobHunting - 待字闺中
p*U
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.
avatar
n*e
2
同问!
avatar
f*d
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.

avatar
y*1
4
http://www.ibm.com/developerworks/library/l-memory/
这个实现,没有用链表。只用了3个全局变量。
面试时,写这个行不行啊?
谢谢 大家探讨啊。。。

【在 f*****d 的大作中提到】
: 就是自己做内存管理,你要维护一个未分配内存和已分配的内存的表。
: malloc ==> 未分配 -> 已分配
: free ==> 已分配 -> 未分配
:
: is

avatar
s*x
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个全局变量。
: 面试时,写这个行不行啊?
: 谢谢 大家探讨啊。。。

avatar
s*r
6
核心就是管理一堆从大到小的memory block
这种要用C的工作不要也罢,失了业不好找下家
avatar
e*s
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.

avatar
q*h
8
CSAPP 第九章有个简单实现,如果对这块不熟悉的话,个人觉得是一个很好的参考。
另外也可参考 STL 的 allocator 实现。
avatar
p*U
9
thanks, 请问 caspp全称? google一下没找到。

【在 q***h 的大作中提到】
: CSAPP 第九章有个简单实现,如果对这块不熟悉的话,个人觉得是一个很好的参考。
: 另外也可参考 STL 的 allocator 实现。

avatar
q*h
10
Should be CSAPP, 深入理解计算机系统, sorry for the typo:)

【在 p****U 的大作中提到】
: thanks, 请问 caspp全称? google一下没找到。
avatar
h*o
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.

avatar
h*o
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.

avatar
g*e
13
requestPage就是当前的free block都不够大了,再request一个新的。
不过如果malloc要求的空间大于1k,就挺难弄的。
这题还可以继续考free block如何管理,从而使得fragmentation尽量减少,以及free
的内存如何粘贴到已有的block里。问这种题的人脑子都不好使,铁了心搞你。
avatar
d*x
14
i guess the simplest impl should be the one in K&R...

【在 q***h 的大作中提到】
: CSAPP 第九章有个简单实现,如果对这块不熟悉的话,个人觉得是一个很好的参考。
: 另外也可参考 STL 的 allocator 实现。

avatar
s*e
15
More Effective C++里面有一个内存池的例子可以参考。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。