2011-04-01 68 views
3

以下哪种调用平均速度更快?我听说mmap对于较小的分配速度更快,但我还没有听说过两者之间的比较。任何关于这些表现的信息都会很好。mmap vs sbrk,性能对比

+0

你知道他们做类似但不同的事情吗? – DarkDust 2011-04-01 18:55:55

+1

是的,我愿意。我只是想知道,如果在可接受的情况下替换另一个会导致性能差异。 – 2011-04-01 18:57:06

+1

您的里程可能会有所不同。最好根据您关心的确切环境进行衡量。 – bmargulies 2011-04-01 19:08:15

回答

10

您应该为此标记一个特定的实现(如linux),因为回答肯定因实现而异。现在我会认为Linux是最受欢迎的。

即使这样说,brk在理论上更加优化,实际上它在我的机器上运行速度提高了10%左右。分配一个页面,这是时代我得到:

  • brk:分钟2550次,典型的2650个周期
  • mmap:分钟2700次,典型的2800个周期

我记得,在听证会的东西brk行可以跳过锁定mmap信号量,这可以解释这种差异。

说明:我在调整我的测试之前更新了这些时间,以在定时之前进行虚拟调用,以确保代码全部位于高速缓存中。

+0

奇怪的是我mmap实际上运行得比sbrk快,但是再次用sbrk它可以保持内存连续。 – 2011-04-04 16:24:41

+1

也许你的系统的'sbrk'正在执行一些用户空间锁定或记帐,或者甚至两次调用'brk'系统调用。 (一旦获得旧的'brk'并再次设置新的...?)如果你正在实现'malloc',我不会依赖系统库的'sbrk',而是自己创建'brk'系统调用。 – 2011-04-04 16:42:41

+0

我最终使用mmap作为从系统中获取内存的主要方式,并在使用MAP_FAILED的情况下使用sbrk作为备份,我可以尝试使用brk调用来查看它的性能。 – 2011-04-04 16:48:19