乐闻世界logo
搜索文章和话题

Malloc

malloc 是一个在 C 语言(及兼容 C 的其他编程语言,如 C++)中广泛使用的函数,用于动态分配内存。malloc 代表 "memory allocation",它在堆区(heap)中分配指定大小的内存块,并返回一个指向该内存块的指针。如果内存分配失败,则返回 NULL 指针。
Malloc
malloc实现会将空闲的ed内存返回给系统吗?
在标准的 `malloc` 实现中,当你使用 `malloc` 函数分配内存时,内存管理器通常从操作系统获得一大块内存,然后将其分割成小块以满足程序的内存请求。当你使用 `free` 函数释放内存时,这些内存块通常会被标记为未使用,可以被后续的 `malloc` 调用重用,但它们并不总是被立即返回给操作系统。 `malloc` 通常使用内存分配算法(如分离适配(segregated fit)、首次适配(first-fit)、最佳适配(best-fit)等)来管理内存。这些算法有助于减少内存碎片,优化内存使用效率。然而,这些算法通常只在内部操作自己的内存池,而不是频繁地将内存返回给操作系统。 有些情况下,特定的 `malloc` 实现可能支持将大块未使用的内存返回给操作系统。这通常是通过 `sbrk`、`mmap`/`munmap` 或类似的系统调用来实现的。一个常见的优化技术是,当一个大的连续内存区域变得空闲时,内存管理器可能会决定将这部分内存返回给操作系统,以减少程序的总内存占用。 例如,glibc 的 `malloc`(使用 ptmalloc),有时会使用 `mmap` 来分配大块内存区域,并在这些内存不再需要时通过 `munmap` 来释放它们,将它们返回给操作系统。但这通常只适用于相对较大的分配,小的分配仍然保留在进程的内存池中以便重用。 总结来说,标准的 `malloc` 实现并不总是将空闲的内存返回给系统,这取决于内存分配的策略和实现细节。返回内存通常是针对大块的内存分配操作,而小块内存则往往保留在进程的内存池中供未来使用。
阅读 8 · 7月21日 21:19