Mmap和malloc

Anonim

mmap vs malloc

C中有动态内存,这指的是通过C标准库中的一组函数在C编程语言中分配内存。其中一个是malloc,它指的是内存分配。在UNIX系统中有mmap,它指的是一个带有自己唯一I / O的内存映射系统。这两个(mmap和malloc)将在面值上执行相同的功能,但进一步的审查揭示了一些差异。这些由功能引起的差异概述如下。

差异

首先,重要的是确定是否有任何证据表明存在可用记忆的显着窒息。这是通过测量程序对内存管理的性能来完成的。

主内存分配接口是malloc。这是C库中最大的。其中包含的部分管理代码是mmap。当malloc运行时,它会收集所有可用的系统工具。可以通过内核调动其他系统工具,这是系统用来确保存在令人满意的内存分配的内存管理策略之一。但是,这个过程并不简单,并且由于防止人们创建可能破坏内存分配并因此导致性能不佳的简单程序的唯一原因而使其变得复杂。

另一方面,'mmap'是一个系统调用,它负责并请求内核在应用程序的地址中找到一个未使用且连续的区域,该区域足够大以允许映射多页内存。还有虚拟内存管理结构的创建,实际上不会导致段错误。

Malloc通常在大多数内存管理过程中起作用。如果程序需要额外的内存,则从操作系统借用。另一方面,Mmap使用转换为内核域的上下文切换。

Malloc最适合在系统上运行的任何应用程序中分配内存,而不是使用mmap。默认情况下需要这样做,除非在特殊情况下允许这样做。

Mmap可用于加速应用程序给出的响应。然而,这是不可取的,因为它最终会牺牲一些字节到页面,以便应用程序可以顺利运行。尽管数据内容在开始时看起来很小,但是当许多应用程序想要运行时对其进行外推可能实际上进一步降低了系统的速度。

在测量资源的性能和使用情况之后,应该对系统上运行的所有应用程序的数据使用情况进行全面评估。如果可以显示运行的应用程序的生命周期,它可以变得更好。

使用mmap来分配内存具有以下缺点:以块的形式分配和释放数据是昂贵的。这是因为数据被分成许多区域,并且还拒绝mmap进行系统调用。

Mmap优于malloc,因为mmap使用的内存会立即返回给操作系统。除非存在数据段中断,否则malloc使用的内存永远不会返回。此内存专门保留以供重用。

摘要

'malloc'代表主内存分配点

mmap系统调用并请求内核在应用程序地址中查找未使用的区域,这些区域可以容纳多个内存页面的映射

建议不要使用Mmap来分配内存,因为它会分割可用内存并且无法进行系统调用

与malloc内存相比,mmap相对于malloc的好处是内存的可用性,而malloc内存是可重用的。