假设我们对大小为n的内存块执行malloc请求,其中对于k> 0,2 ^ k!= n。 Malloc为请求的内存块返回空间,但是如何从页面处理stillig缓冲区。我读过Pages通常是内存块,它们是2的幂。
Wiki声明如下:
Like any method of memory allocation, the heap will become fragmented; that is,
there will be sections of used and unused memory in the allocated
space on the heap. A good allocator will attempt to find an unused area
of already allocated memory to use before resorting to expanding the heap.
所以我的问题是这是如何跟踪的?
编辑:使用malloc时如何跟踪未使用的内存?
答案 0 :(得分:3)
这实际上取决于具体的实施,正如Morten Siebuhr已经指出的那样。在非常简单的情况下,可能存在一系列可用的,固定大小的内存块(可能都具有相同的大小),因此未使用的内存被浪费掉了。请注意,实际实现永远不会使用这种简单的算法。
这是对一些简单可能性的概述:http://www.osdcom.info/content/view/31/39/
此维基百科条目有几个有趣的链接,包括上面的一个:http://en.wikipedia.org/wiki/Dynamic_memory_allocation#Implementations
作为最后的评论,谷歌搜索“malloc实现”变成了一堆有价值的链接(双关语)。
答案 1 :(得分:3)
标准的BSD风格的内存分配器基本上是这样的:
对上述一般想法的修改包括:
答案 2 :(得分:2)
从实现到实现,这有很多很多。有些人浪费了空间,一些细分页面直到他们得到所要求的尺寸(或接近它)& c。
如果您是出于好奇,我建议您阅读相关实施的源代码,
如果是因为性能问题,请尝试对其进行基准测试,看看会发生什么。