由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - "brk()" 和 mmap() 有什么区别? (转载)
相关主题
寻找一个allocator 做一个指定内存空间内的 alloc/free请问释放容器内存的方法
how much slower: heap vs stack memory allocation?请问一个关于 cost of pointer的问题
菜鸟请教C问题static variable存在heap还是stack?
奇怪的问题:关于一个简单的malloc()小程序 (转载)effective C++里的memory pool 一问:
问一个跟 memory (process address space) 的有关的问题 (转载)stack/heap corruption
突然发现现在很反感malloc了another c++ interview question
有谁对glibc的allocator有研究?问一个private destructor的问题
怎样在内存中打洞why do we still use dynamic allocation?
相关话题的讨论汇总
话题: mmap话题: brk话题: heap话题: memory话题: 区别
进入Programming版参与讨论
1 (共1页)
f******e
发帖数: 164
1
【 以下文字转载自 Linux 讨论区 】
发信人: francise (小飞猫), 信区: Linux
标 题: "brk()" 和 mmap() 有什么区别?
发信站: BBS 未名空间站 (Sat Mar 29 23:41:09 2008)
我理解 brk(), but what if brk() reaches the boundary of the top of a heap (
4G memory)?
我的朋友告诉我说, mmap() maps kernal memory to user, but I really doubt him
. Is he right?
m*****e
发帖数: 4193
2

brk() can fail.
him
mmap() creates separate memory mapping from heap.

【在 f******e 的大作中提到】
: 【 以下文字转载自 Linux 讨论区 】
: 发信人: francise (小飞猫), 信区: Linux
: 标 题: "brk()" 和 mmap() 有什么区别?
: 发信站: BBS 未名空间站 (Sat Mar 29 23:41:09 2008)
: 我理解 brk(), but what if brk() reaches the boundary of the top of a heap (
: 4G memory)?
: 我的朋友告诉我说, mmap() maps kernal memory to user, but I really doubt him
: . Is he right?

f******e
发帖数: 164
3
谢谢。我的疑问是:如果reach top of heap(0x40000000),mmap()哪里来的memory
address for allocating?如果memory address仍然是增长的( >0x40000000 ),那么
为什么还需要brk()这种system call?大家在一开始都用mmap()不就行了?

【在 m*****e 的大作中提到】
:
: brk() can fail.
: him
: mmap() creates separate memory mapping from heap.

m*****e
发帖数: 4193
4

mmap() was introduced later into Unix with virtual memory. Originally there
was only heap.
Also, mmap() is much more expensive than brk() so for efficiency reasons
small memory allocations always use heap.

【在 f******e 的大作中提到】
: 谢谢。我的疑问是:如果reach top of heap(0x40000000),mmap()哪里来的memory
: address for allocating?如果memory address仍然是增长的( >0x40000000 ),那么
: 为什么还需要brk()这种system call?大家在一开始都用mmap()不就行了?

i*****r
发帖数: 265
5
One thing you must be clear is that all mmap and brk do nothing else but
allocate address space (no actual physical page allocated). brk simply play
with heap pointers thus will be more efficient for small allocations. mmap
create additional vma structure for the process (at least for Linux) and
could be more expensive. mmap() could fail to ... there is nothing
guaranteed to be successful.
v**u
发帖数: 20
6
地址空间的大小是由地址指针宽度决定的,如果你的机器是32 位的,你的OS和应用程
序当然也是编译为32位,那末你的最大寻址空间就是4G,所以你担心的事情永远不会在
32位的机器上出现。
brk()是专为调整heap size 的,mmap() 有很多别的用途,比如把I/O地址map 到用户
空间, 比如文件map 到地址空间,等等,很强大很危险。
v**u
发帖数: 20
7
地址空间的大小是由地址指针宽度决定的,如果你的机器是32 位的,你的OS和应用程
序当然也是编译为32位,那末你的最大寻址空间就是4G,所以你担心的事情永远不会在
32位的机器上出现。
brk()是专为调整heap size 的,mmap() 有很多别的用途,比如把I/O地址map 到用户
空间, 比如文件map 到地址空间,等等,很强大很危险。而且mmap() map 的memory是独立于heap 之外的,这用超大malloc就不用占用heap了。 哎呀,嘴笨,说不清,反正是很不同的。:)
1 (共1页)
进入Programming版参与讨论
相关主题
why do we still use dynamic allocation?问一个跟 memory (process address space) 的有关的问题 (转载)
[合集] 谁给个stack-based allocation 的C++的例子?突然发现现在很反感malloc了
purify和valgrind的比较有谁对glibc的allocator有研究?
STL堆操作怎样对堆顶元素做ShiftDown?怎样在内存中打洞
寻找一个allocator 做一个指定内存空间内的 alloc/free请问释放容器内存的方法
how much slower: heap vs stack memory allocation?请问一个关于 cost of pointer的问题
菜鸟请教C问题static variable存在heap还是stack?
奇怪的问题:关于一个简单的malloc()小程序 (转载)effective C++里的memory pool 一问:
相关话题的讨论汇总
话题: mmap话题: brk话题: heap话题: memory话题: 区别