龙空技术网

动态内存分配介绍

算法集市 1329

前言:

此刻大家对“什么叫动态分配”都比较重视,我们都需要剖析一些“什么叫动态分配”的相关知识。那么小编在网络上搜集了一些关于“什么叫动态分配””的相关资讯,希望姐妹们能喜欢,姐妹们一起来了解一下吧!

C语言的内存分配方式:堆和栈

基于缓存的存储器层次结构

当C程序在运行过程中需要额外虚拟内存时,可以使用动态内存分配器(Dynamic Memory Allocator)。

动态内存分配器维护着一个进程的虚拟内存区域,成为堆(heap)。假设堆是一个请求二进制零的区域,它紧接在未初始化的数据区域后开始,并向上生长(向更高地址)。对于每个进程,内核维护着一个变量brk,它指向堆的顶部。

分配器将堆视为一组不同大小的块(block)的集合来维护。每个块就是一个连续的虚拟内存片(chunk),要么是已分配的,要么是空闲的。已分配的块显式地保留为供应用程序使用。空闲块可用来分配,空闲块保持空闲,直到它显式地被应用分配。一个已分配的块保持已分配状态,直到它被释放,这种释放要么是应用程序显式执行的,要么是内存分配器自身隐式执行的。

分配器有两种基本风格。两种风格都要求应用显式地分配块。它们的不同之处在于由哪个实体来负责释放已分配的块。

显示分配器(explicit allocator):要求应用显式地释放任何已分配的块。如C标准库提供的malloc、free函数。C++中的new、delete操作符。隐式分配器(implicit allocator):要求分配器检测一个已分配的块何时不再被程序所使用,则释放这个块。隐式分配器也叫做垃圾收集器(garbage collector),自动释放未使用的已分配的块的过程叫做垃圾收集(garbage collection)。如Java之类的高级语言就依赖垃圾收集来释放已分配的块。

标签: #什么叫动态分配