- 论坛徽章:
- 0
|
原帖由 雨丝风片 于 2006-3-30 15:24 发表
page directory的大小确实是根据brk的内存大小来确定的,不知道你所说的浪费是指什么?page directry是用来管理malloc内部4K大小的page的,因此每个page都会对应一个条目。但page仅仅是malloc和内核的交易单位, ...
Excellent work!
让我解释一下我的意思.
1 如果把page directory看成一个array, 它的index是page number, 它的element是该page的管理信息(meta data). 如果用户程序的内存申请size远大于pagesize, 象LZ的测试程序是1MB的内存块, 那么page directory是sparse array. 所以我说有点浪费.
2 malloc不考虑mmap是不行的. 特别象FreeBSD, default heap的顶被mmap area固定了. 当brk到这个顶的时候, 用户不能再得到内存, 但mmap area还有很多空间. 这不是米饭/馒头的选择, 会饿死的. 换句话说, 不管kernel把mmap起始地址放哪儿, malloc都应当分配出~3GB给用户程序.
3 page-directory一次性分配只需要3MB (32bit), 而且只是virtual address. 完全值得. 第一, 只有一个sysem call. 第二, 不会有将来分配不到的可能. 第三, 因为不搬家,实际占用空间可能少一些. |
|