这两种调用平均哪个更快?我听说在分配较小的内存时,mmap
更快,但是我没有听到过它们之间的比较。如果有关于它们性能的任何信息都可以提供。
这两种调用平均哪个更快?我听说在分配较小的内存时,mmap
更快,但是我没有听到过它们之间的比较。如果有关于它们性能的任何信息都可以提供。
由于答案因实现而异,您应该使用特定的实现(如 linux )对其进行标记。就目前而言,我将假设Linux是最受欢迎的实现。
话虽如此,理论上来说brk
更容易优化,在实践中,我的机器上运行速度大约快10%。以下是我得到的一些分配一个页面的时间:
brk :最小2550个周期,典型2650个周期
mmap :最小2700个周期,典型2800个周期
我记得听说过brk
能够跳过锁定mmap
信号量的操作,这可以解释差异。
注意:在调整我的测试以使代码保持在缓存中之前,我更新了这些时间,以进行虚拟调用。
sbrk
正在执行一些用户空间锁定或记账,甚至调用两次brk
系统调用(一次获取旧的brk
,再次设置新的brk
...?)如果你正在实现malloc
,我不会依赖于系统库的sbrk
,而是自己进行brk
系统调用。 - R.. GitHub STOP HELPING ICE
malloc
的程序中使用sbrk
(或更糟的是brk
)。由于任何标准库函数都可能调用malloc
,这意味着你不能使用标准库。 - R.. GitHub STOP HELPING ICE