由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 关于内存分配器的题。 谢谢。
相关主题
一个cc150里面的题目,不解F家面经
问10个老题通常FACEBOOK电面后几天没有消息就可以MOVEON 了
我最喜欢问的问题,怎样检查out of memory一道设计数据结构题目
这道linkedin题是不是应该用segment tree?G一道题
再来题目binary tree, sum of 2 nodes == given number
也问一个median的问题问个CareerCup上external sort的题
请教一个balanced tree的问题n个排序链表,如何O(1) space合并成一个
google 2nd onsite?感觉G家面试还是和面的组工作内容略微相关的
相关话题的讨论汇总
话题: tree话题: allocator话题: list话题: search话题: 内存
进入JobHunting版参与讨论
1 (共1页)
a*****1
发帖数: 314
1
why do we use circular link list in place of any balanced binary search tree
in storage allocator? One draw back is that to free() a chunk of memory
allocator has to search the link list and then if found that address then
release , so why not tree to reduce this search and merge?
请高手,给出简单解释。
谢谢
h****n
发帖数: 1093
a*****1
发帖数: 314
3
我看了。还是有些模糊,和不确定。
谢谢
h****n
发帖数: 1093
4
我的理解就是内存分配器的目的是找到一块合适大小的空间,Tree你可以logn找到特定
节点,但是要找到合适大小的空间你依然需要遍历树中的节点,所以也是n,复杂度和
list比没啥优势,大概就这样子吧
d**********x
发帖数: 4083
5
我没用试过用bst来做allocator
我猜一个可能的原因是,circular link list只要单链表就行,搜索的时候首先可以分
bin,其次可以用next-fit,效率不会太差
而bst虽然效率高,但是它需要两个指针的overhead,这对于处理很多小对象的系统来
说是个严重负担

tree

【在 a*****1 的大作中提到】
: why do we use circular link list in place of any balanced binary search tree
: in storage allocator? One draw back is that to free() a chunk of memory
: allocator has to search the link list and then if found that address then
: release , so why not tree to reduce this search and merge?
: 请高手,给出简单解释。
: 谢谢

s********k
发帖数: 6180
6
tree还是有优势,比如所有节点都是不同大小的内存块,那么你知道了需要分配的内存
在这个内存树种就只需要logn找到合适的,链表要n,不过实际上大多数内存块都不是
完全任意大小,而是分别在几个不同大小的级别,Buddy system algorithm就是这样。
所以实际上应该是array加链表最合适,简单高效

【在 h****n 的大作中提到】
: 我的理解就是内存分配器的目的是找到一块合适大小的空间,Tree你可以logn找到特定
: 节点,但是要找到合适大小的空间你依然需要遍历树中的节点,所以也是n,复杂度和
: list比没啥优势,大概就这样子吧

d**********x
发帖数: 4083
7
exactly.
但是我的point是树的overhead太大,64位系统要两个8 byte指针,好可怕。

特定
度和

【在 s********k 的大作中提到】
: tree还是有优势,比如所有节点都是不同大小的内存块,那么你知道了需要分配的内存
: 在这个内存树种就只需要logn找到合适的,链表要n,不过实际上大多数内存块都不是
: 完全任意大小,而是分别在几个不同大小的级别,Buddy system algorithm就是这样。
: 所以实际上应该是array加链表最合适,简单高效

s********k
发帖数: 6180
8
其实我觉得内存分配最主要的overhead是速度,而不是内存大小,当然tree是有data
structure方面的overhead,但是其他简单的buddy system或者slab也有external,
internal fragementation的overhead。只是在实际系统中,对内存的要求满足tree形
式的太少了,几乎没有。

【在 d**********x 的大作中提到】
: exactly.
: 但是我的point是树的overhead太大,64位系统要两个8 byte指针,好可怕。
:
: 特定
: 度和

i****1
发帖数: 445
9
我的感觉是:
1. circular link list不需要额外的data structure,直接在block的前面留两个byte
or word表示状态,即可。而且是直接访问,不想tree,那样间接访问。
2. 当需要merge/de-fragmentation时,link list就很方便了直接merge毫无压力,O(1)
时间。但是tree就不一样了,tree要满足bst的性质,旋转子树是在所难免的。
当然通常的search for a proper size block,link list需要O(N)时间,而tree则只需
要O(logn).但是实际系统应该是用一个额外的list来链接free block的。

tree

【在 a*****1 的大作中提到】
: why do we use circular link list in place of any balanced binary search tree
: in storage allocator? One draw back is that to free() a chunk of memory
: allocator has to search the link list and then if found that address then
: release , so why not tree to reduce this search and merge?
: 请高手,给出简单解释。
: 谢谢

1 (共1页)
进入JobHunting版参与讨论
相关主题
感觉G家面试还是和面的组工作内容略微相关的再来题目
请教一下external sorting的问题也问一个median的问题
这道设计题怎么做?请教一个balanced tree的问题
问一道题 实现mallocgoogle 2nd onsite?
一个cc150里面的题目,不解F家面经
问10个老题通常FACEBOOK电面后几天没有消息就可以MOVEON 了
我最喜欢问的问题,怎样检查out of memory一道设计数据结构题目
这道linkedin题是不是应该用segment tree?G一道题
相关话题的讨论汇总
话题: tree话题: allocator话题: list话题: search话题: 内存