微软100题(98)malloc实现
来源:互联网 发布:mac上的音乐播放器 编辑:程序博客网 时间:2024/05/23 19:22
第2组微软面试题
1.给出一个函数来输出一个字符串的所有排列。
2.请编写实现malloc()内存分配函数功能一样的代码。
3.给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。
4.怎样编写一个程序,把一个有序整数数组放到二叉树中?
5.怎样从顶部开始逐层打印二叉树结点数据?请编程。
6.怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)?
1、参见全排列和组合数
http://blog.csdn.net/liuqing0517/article/details/45720777
2、参见
http://lklkdawei.blog.163.com/blog/static/32574109200881445518891/
我们知道调用malloc()后,OS就要想方设法为我们返回一块空闲空间。这就涉及到OS的内存管理。OS的内存管理可以这样考虑:
假设整块内存有128K
初始状态,128K都是空闲
第一次请求,申请了16k,空闲112K
第二次请求,申请了32K,空闲80K
第三次请求,申请了8K,空闲72K
第二次请求申请的32K被释放,空闲108K
第四次请求,申请了24K,空闲84K
从上面的例子可以看出,一整块连续的空闲内存块,经过一段时间的使用,会被无情的划分为许多小块。这些小块大小不等,并且有的空闲、有的被占用。
当调用malloc时,OS就沿内存扫描,找到一块够大的空闲块,从中划分出要使用的部分,将这部分标记为己分配,并返回这部分的首地址。如果,空闲的块都是些小的碎片,那就悲具了(当然,OS可以把将相邻的空闲块合并,再尝试)。
现在,模拟一下malloc的过程:
为了便于管理,首先定义内存控制块mcb。这个mcb记录两个信息:块是否空闲、块的大小。即,每个分配出去的块,其实都带有一个mcb,只不过这个mcb位于块的最前端,返回该用户的指针刚好指向mcb之后,所以对用户是不可见的。
现在,就可以处理free了。Free只要把已分配的内存块重新标记为空闲即可,这里当然要用到该快的mcb了。
Malloc简单来说,就是维护几个指针,根据分配请求修改指针位置。对于要分配的块,将标记置位己分配,并返回这部分的首地址。
3.memmove函数的实现
4、中间开始,分左右递归
5、层序遍历,用队列
6、链表逆序
0 0
- 微软100题(98)malloc实现
- 微软100题(89)atoi实现
- malloc()实现原理2
- 微软100题(34)生产者消费者模型实现队列
- 微软100题(57)两个栈实现队列
- 微软100题(79)strstr函数的实现
- 微软100题(83)百度面试题_memmove实现
- 微软100题(96)strcpy的实现
- 微软面试100题-57 (用俩个栈实现队列)
- malloc 实现
- malloc实现
- malloc实现
- malloc的实现原理学习(1)
- malloc的实现原理学习(2)
- malloc的实现原理学习(1)
- malloc的实现原理学习(2)
- linux-malloc底层实现原理(2)
- malloc的实现原理(1)
- 第五章
- 常见编译错误提示附解决方法
- 振作
- 黑马程序员——IO流
- 无法导出VPN设置--VPN Configuration failure
- 微软100题(98)malloc实现
- Cocos2dx切换场景和资源崩溃的那些事
- 深入浅出TCP之send和recv
- OC学习--数组的使用
- 深入浅出UML类图
- loadLibSVMFile 源码
- Windows socket之IO完成端口(IOCP)模型开发
- LightOJ 1341 - Aladdin and the Flying Carpet【合数分解】
- mybatis中Text的格式问题